Caching Apache · 3 min read · Jan 01, 2026

Caching Con mod_cache di Apache Su Debian Etch - Pagina 2

2.2 mod_mem_cache

La configurazione di mod_mem_cache si trova in /etc/apache2/mods-available/mem_cache.conf:

vi /etc/apache2/mods-available/mem_cache.conf   

| CacheEnable mem / MCacheSize 4096 MCacheMaxObjectCount 100 MCacheMinObjectSize 1 MCacheMaxObjectSize 2048 |

Questa è la configurazione predefinita - se vuoi puoi modificarla. Un elenco delle direttive di configurazione per mod_mem_cache è disponibile qui: http://httpd.apache.org/docs/2.2/mod/mod_mem_cache.html

Ora abilitiamo mod_cache e mod_mem_cache come segue:

a2enmod cache
a2enmod mem_cache

/etc/init.d/apache2 force-reload

Ecco fatto! Con mod_mem_cache, non devi pulire alcuna directory di cache.

3 Test

Sfortunatamente mod_cache non fornisce alcuna funzionalità di logging, il che è un problema se vuoi sapere se il logging funziona. Pertanto creo un piccolo file di test PHP, /var/www/cachetest.php, che invia intestazioni HTTP che dicono a mod_cache che dovrebbe memorizzare nella cache il file per 300 secondi e che semplicemente stampa il timestamp:

vi /var/www/cachetest.php

| "; ?> |

Ora chiama quel file in un browser - dovrebbe visualizzare il timestamp corrente. Poi clicca nella barra degli indirizzi del browser e premi INVIO affinché la pagina venga ricaricata (non premere F5 o il pulsante di ricarica - questo recupererà sempre una copia fresca dal server invece che dalla cache!) - se tutto va bene, dovresti ancora vedere il vecchio timestamp memorizzato nella cache. Se aspetti 300 secondi, dovresti ricevere una copia fresca dal server invece che dalla cache.

4 Intestazioni HTTP

La memorizzazione nella cache non funziona out-of-the-box - devi modificare la tua applicazione web affinché la memorizzazione nella cache possa funzionare (è possibile che la tua applicazione web supporti già la memorizzazione nella cache - consulta la documentazione della tua applicazione per scoprirlo). mod_cache memorizzerà nella cache le pagine web solo se le intestazioni HTTP inviate dalla tua applicazione web glielo dicono.

Ecco alcuni esempi di intestazioni che dicono a mod_cache di non memorizzare nella cache:

  • Intestazioni Expires con una data nel passato: “Expires: Sun, 19 Nov 1978 05:00:00 GMT”
  • Alcune intestazioni Cache-Control: “Cache-Control: no-store, no-cache, must-revalidate” o “Cache-Control: must-revalidate, max-age=0”
  • Intestazioni Set-Cookie: una pagina non sarà memorizzata nella cache se viene impostato un cookie.

Quindi, se vuoi che mod_cache memorizzi nella cache le tue pagine, modifica la tua applicazione per non inviare tali intestazioni.

Se vuoi che mod_cache memorizzi nella cache le tue pagine, puoi impostare un’intestazione Expires con una data nel futuro, ma il modo raccomandato è utilizzare max-age:

"Cache-Control: must-revalidate, max-age=300"

Questo dice a mod_cache di memorizzare nella cache la pagina per 300 secondi (max-age) - sfortunatamente mod_cache non conosce l’opzione s-maxage (vedi http://www.mnot.net/cache_docs/#CACHE-CONTROL), ecco perché dobbiamo usare l’opzione max-age (che dice anche al tuo browser di memorizzare nella cache - tienilo a mente se ottieni risultati inaspettati!). Se mod_cache conoscesse l’opzione s-maxage, potremmo usare “Cache-Control: must-revalidate, max-age=0, s-maxage=300” che direbbe a mod_cache, ma non al browser, di memorizzare nella cache la pagina.

Certo, questa intestazione è inutile se invii contemporaneamente una delle intestazioni non di memorizzazione nella cache (Expires nel passato, Set-Cookie, ecc.) sopra!

Un’altra intestazione molto importante per la memorizzazione nella cache è questa:

"Vary: Accept-Encoding"

Questo fa sì che mod_cache mantenga due copie di ogni pagina memorizzata nella cache, una compressa (gzip) e una non compressa in modo che possa fornire la versione giusta a seconda delle capacità dell’user-agent/browser. Alcuni user-agent non comprendono la compressione gzip, quindi dovrebbero ricevere la versione non compressa.

Quindi ecco il riepilogo: usa le seguenti due intestazioni se vuoi che mod_cache memorizzi nella cache:

“Cache-Control: must-revalidate, max-age=300”
“Vary: Accept-Encoding”

e assicurati che non vengano inviate intestazioni Expires con una data nel passato, cookie, ecc.

Se la tua applicazione è scritta in PHP, puoi usare la funzione header() di PHP per inviare intestazioni HTTP, ad esempio in questo modo:

header(“Cache-Control: must-revalidate, max-age=300”);
header(“Vary: Accept-Encoding”);

Questa pagina è un must-read se vuoi saperne di più sulle intestazioni HTTP e sulla memorizzazione nella cache: http://www.mnot.net/cache_docs/

5 Link

Share: X/Twitter LinkedIn

Ricevi i nuovi post nella tua casella di posta.

Nessuno spam. Disiscriviti in qualsiasi momento.