Procédure
In questa documentazione, vi spiegheremo passo dopo passo come obbligare Varnish e i browser a mantenere le vostre risorse in cache, anche quando questi inviano richieste Pragma: no‑cache o Cache‑Control: no-cache.
Le formule di hosting condiviso e cPanel/VPS gestiti di LWS si basano sullo stack :
Browser ⇄ NGINX (SSL + HTTP/2) ⇄ Varnish Cache ⇄ Apache/PHP-FPM
Quando tutto è configurato correttamente, Varnish può servire fino a 1000 volte più velocemente di un accesso diretto a PHP, alleggerendo al contempo la CPU del server.
| Elemento | Impatto sulla cache | Come influenzarlo |
| Metodo | Solo GET e HEAD sono idonei | Evitare i POST per le pagine pubbliche |
| Intestazioni risposta Cache-Control, Expires, Pragma | Determinano la durata e la portata | Impostare tramite .htaccess (vedi §3) |
| Cookie / Set-Cookie | Un cookie presente = nessuna messa in cache predefinita | Rimuovere o neutralizzare i cookie inutili |
| Status HTTP | 200, 203, 301, 302, 404, 410 sono memorizzabili in cache | Nessuna azione, ma evitare i 500! |
Trucs et astuces Varnish ignora per impostazione predefinita il Cache-Control: no-cache inviato dal browser per i file statici, ma rispetta la "revalidation logic" se l'oggetto è già in cache.
Attivate il modulo mod_headers (è il caso predefinito presso LWS) poi inserite il seguente snippet dove desiderate:
Header set Cache-Control "public, max-age=3600, s-maxage=3600, stale-while-revalidate=60, stale-if-error=86400"
Header set Expires "Thu, 31 Dec 2037 23:55:55 GMT"
Mettere lo stesso file .htaccess nella cartella "/images/" applica la regola solo alla cartella "images".
Header set Cache-Control "public, max-age=2592000, s-maxage=2592000, immutable"
immutable : indica al browser che non è necessaria alcuna revalidazione finché l'oggetto non è scaduto; ideale per i file versionati (style.483bf.css).
3.3. Cache breve per HTML
Header set Cache-Control "public, max-age=300, s-maxage=600, must-revalidate"
Scade dopo 5 min lato client e 10 min lato Varnish, quindi revalidazione obbligatoria.
| Caso reale | Frammento di .htaccess | Perché? |
| Landing page aggiornata ogni ora | max-age=600, s-maxage=1200 | I visitatori hanno dati «quasi in tempo reale» senza saturare PHP |
| CSS/JS versionati | max-age=31536000, immutable | Traffico quasi nullo sul server, caricamento istantaneo |
| Immagini prodotto e‑commerce | max-age=604800 | Riduce il TTFB, accelera il catalogo |
| Back‑office / wp-admin | no-store, private | Evita di mettere dati sensibili nella cache condivisa |
Dal vostro hosting (script PHP del vostro sito, attività Cron o terminale SSH), la purga della cache Varnish non richiede alcun token:
curl -X PURGE https://exemple.com/chemin/ressource.jpg
curl -X PURGE -H 'X-Purge-Method: regex' 'https://exemple.com/images/.*'
curl -X FULLPURGE https://exemple.com
$ch = curl_init('https://exemple.com/chemin/page.html');
curl_setopt_array($ch, [CURLOPT_CUSTOMREQUEST => 'PURGE', CURLOPT_RETURNTRANSFER => true, CURLOPT_TIMEOUT => 20]);
curl_exec($ch);
$code = curl_getinfo($ch, CURLINFO_HTTP_CODE); // 200 : cache purge ; 405 : purge refusata
curl_close($ch);Uno script completo, pronto per un'attività Cron, è proposto nell'aiuto Accelerare la velocità del vostro sito con Fastest Cache. Potete anche svuotare la cache dal vostro pannello, con il pulsante «Svuotare la cache» di Fastest Cache.
curl -I https://exemple.com/style.cssOsservate:
Con Chrome/Edge: DevTools > Network > Disable cache può simulare un primo visitatore.
✅ La vostra cache Varnish è ora sotto controllo!
Ponila al team LWS e alla community. La risposta viene pubblicata dopo la moderazione.