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 | |
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-reloadEcco 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
- Apache: http://httpd.apache.org/
- mod_cache: http://httpd.apache.org/docs/2.2/mod/mod_cache.html
- mod_disk_cache: http://httpd.apache.org/docs/2.2/mod/mod_disk_cache.html
- mod_mem_cache: http://httpd.apache.org/docs/2.2/mod/mod_mem_cache.html
- Guida alla memorizzazione nella cache di Apache: http://httpd.apache.org/docs/2.2/caching.html
- Tutorial sulla memorizzazione nella cache: http://www.mnot.net/cache_docs/
- Debian: http://www.debian.org/
Ricevi i nuovi post nella tua casella di posta.
Nessuno spam. Disiscriviti in qualsiasi momento.