Forzare la cache Varnish su LWS

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.

1. Contesto e architettura LWS

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

  • NGINX gestisce TLS e comprime i contenuti.
  • Varnish (Fastest Cache) è posizionato come reverse‑proxy per memorizzare in cache le risposte HTTP.
  • Apache o PHP‑FPM generano la risposta finale quando Varnish non ha un HIT.

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.

2. Promemoria: come decide Varnish di mettere in cache?

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.

3. Controllare la durata tramite .htaccess

Attivate il modulo mod_headers (è il caso predefinito presso LWS) poi inserite il seguente snippet dove desiderate:

⌨ Comando

  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"
  • max-age : durata (in secondi) nel browser.
  • s-maxage : durata specifica per le cache condivise (Varnish/CDN).
  • stale-while-revalidate : consente a Varnish di servire un contenuto scaduto mentre lo aggiorna in background.
  • stale-if-error : serve la versione scaduta se il backend risponde con errore (fail‑safe).

3.1. Target per cartella

Mettere lo stesso file .htaccess nella cartella "/images/" applica la regola solo alla cartella "images".

3.2. Target per estensione

⌨ Comando

  
    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

⌨ Comando

  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.

4. Scenari concreti d'uso

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

5. Svuotare o invalidare la cache

Dal vostro hosting (script PHP del vostro sito, attività Cron o terminale SSH), la purga della cache Varnish non richiede alcun token:

  • Una pagina:
⌨ Comando
curl -X PURGE https://exemple.com/chemin/ressource.jpg
  • Un'intera cartella, tramite espressione regolare:
⌨ Comando
curl -X PURGE -H 'X-Purge-Method: regex' 'https://exemple.com/images/.*'
  • Tutto il sito:
⌨ Comando
curl -X FULLPURGE https://exemple.com
  • In PHP, per esempio dopo l'aggiornamento di un contenuto:
Codice
$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.

6. Test e debug

⌨ Comando
curl -I https://exemple.com/style.css

Osservate:

  • Age: 356 → Varnish ha servito una risposta con età di 356 s.
  • Cache-Control: public, max-age=2592000, s-maxage=2592000, immutable
  • X-Cache: HIT (o MISS).

Con Chrome/Edge: DevTools > Network > Disable cache può simulare un primo visitatore.

7. Errori comuni

  1. Cookie inutili : molti temi WordPress impostano un cookie anche per le pagine pubbliche. Rimuoveteli o disattivateli tramite functions.php.
  2. Stringhe di query : per impostazione predefinita, ?v=123 crea una nuova voce nella cache. Meglio versionare nel nome del file.
  3. Contenuto sensibile : moduli, pagine dell'area clienti ➡ no-store, private, max-age=0.
  4. Compressione Brotli/Gzip : attivatela prima del livello Varnish per evitare una doppia messa in cache.

8. Buone pratiche riassuntive

  • Utilizzate s-maxage ⩾ max-age per mantenere una cache proxy più lunga di quella del browser.
  • Impostate immutable su ogni file il cui nome contiene un hash.
  • Non mescolate Expires obsoleto con max-age se non per i vecchi browser.
  • Documentate i vostri TTL in un file CACHE_POLICY.md per il team.

9. Risorse utili

✅ La vostra cache Varnish è ora sotto controllo!

help.lws.net/a/1949
Questo articolo ti è stato utile?

Sì

No

Letto 7 650 volte

Grazie! Non esitare a porre domande sulla nostra documentazione se desideri maggiori informazioni e aiutarci a migliorarla.

Articoli simili

Una domanda su questo articolo?

Ponila al team LWS e alla community. La risposta viene pubblicata dopo la moderazione.

Fate una domanda al team LWS e alla sua comunità

GDPR: Titolare: LWS-Ligne Web Services. Finalità: moderazione e pubblicazione della tua domanda, eventuale notifica di una risposta. Base giuridica: consenso (art. 6.1.a GDPR). Conservazione delle e-mail: 90 giorni dopo la notifica, massimo 12 mesi senza risposta. Per esercitare i tuoi diritti, consulta la sezione GDPR delle nostre condizioni generali.