Forzare la cache di Varnish su LWS

Procédure

In questa documentazione spiegheremo passo dopo passo come forzare Varnish e i browser a mantenere le risorse nella cache, anche quando inviano richieste Pragma: no-cache o Cache-Control: no-cache.

1. Contesto e architettura LWS

I pacchetti di hosting condiviso e di cPanel/VPS gestiti di LWS si basano sull'architettura :

Browser ⇄ NGINX (SSL + HTTP/2) ⇄ Varnish Cache ⇄ Apache/PHP-FPM

  • NGINX gestisce il TLS e comprime il contenuto.
  • Varnish (Fastest Cache) è utilizzato come reverse proxy per memorizzare le risposte HTTP.
  • Apache o PHP-FPM generano la risposta finale quando Varnish non ha HIT.

Quando tutto è configurato correttamente, Varnish può fornire una velocità fino a 1000 volte superiore rispetto all'accesso diretto a PHP, alleggerendo al contempo la CPU del server.

2. Promemoria: come fa Varnish a decidere la cache?

Elemento Impatto sulla cache Come influenzarla
Metodo Solo GET e HEAD sono ammissibili Evitare i POST per le pagine pubbliche
Intestazioni di risposta Cache-Control, Expires e Pragma Determinano la durata e l'ambito Impostare tramite .htaccess (vedere §3)
Cookie / Set-Cookie Un cookie presente = nessuna cache per impostazione predefinita Eliminare o disabilitare i cookie non necessari
Stato HTTP 200, 203, 301, 302, 404, 410 sono memorizzabili nella cache Nessuna azione, ma evitare 500!

[tips]Varnish ignora per impostazione predefinita il Cache-Control: no-cache inviato dal browser per i file statici, ma rispetta la "logica di riconvalida" se l'oggetto è già nella cache[/tips].

3. Controllare il tempo di vita tramite .htaccess

Attivate il modulo mod_headers (è quello predefinito in LWS) e inserite il seguente snippet dove volete:


  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 contenuti obsoleti mentre li aggiorna in background.
  • stale-if-error: serve la versione non aggiornata se il backend risponde con un errore (fail-safe).

3.1 Targeting per cartella

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

3.2 Individuazione del bersaglio per estensione


  
    L'intestazione imposta Cache-Control "public, max-age=2592000, s-maxage=2592000, immutable".  

immutable: indica al browser che non è necessaria una riconvalida fino alla scadenza dell'oggetto; ideale per i file con versione (style.483bf.css).

3.3 Cache breve per l'HTML


  Header set Cache-Control "public, max-age=300, s-maxage=600, must-revalidate".

Scade dopo 5 minuti lato client e 10 minuti lato Varnish, poi deve essere riconvalidata.

4. Scenari di utilizzo reali

Caso reale Frammento di .htaccess Perché dovrebbe farlo?
Pagina di destinazione aggiornata ogni ora max-age=600, s-maxage=1200 I visitatori ricevono dati "quasi in diretta" senza sovraccaricare il PHP
CSS/JS aggiornati max-age=31536000, immutabile Praticamente nessun traffico sul server, caricamento istantaneo
Immagini dei prodotti di e-commerce max-age=604800 Riduce il TTFB, velocizza il catalogo
Back-office / wp-admin no-store, privato Evita di inserire dati sensibili nella cache condivisa

5. Eliminare o invalidare la cache

  1. Dal pannello LWS: Ottimizzazione e prestazioni > Cache LWS > Svuota cache.
  2. HTTP PURGE (se abilitato):
    curl -X PURGE -H "Host: example.com" https://exemple.com/chemin/ressource.jpg
  3. Divieto per espressione (VCL avanzato):
    ban req.http.host == "example.com" && req.url ~ "/images/"

6. Test e debug

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

Guardare :

  • Età: 356 → Varnish ha servito una risposta di 356 secondi.
  • 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. Insidie comuni

  1. Cookie non necessari: molti temi di WordPress impostano un cookie anche per le pagine pubbliche. Eliminarli o disabilitarli tramite functions.php.
  2. Stringhe di query: per impostazione predefinita, ?v=123 crea una nuova voce nella cache. La versione nel nome del file, invece, è da considerarsi un'opzione.
  3. Contenuti sensibili: moduli, pagine dell'area clienti ➡ no-store, private, max-age=0.
  4. Compressione Brotli/Gzip: attivarli prima del livello Varnish per evitare una doppia cache.

8. Riassunto delle migliori pratiche

  • Utilizzare s-maxage ⩾ max-age per mantenere una cache proxy più lunga di quella del browser.
  • Mettere immutable su qualsiasi file il cui nome contenga un hash.
  • Non mischiare Obsolete Expires con max-age, tranne che per i browser più vecchi.
  • Documentare i TTL in un file CACHE_POLICY.md per il team.

9. Risorse utili

La vostra cache Varnish è ora sotto controllo!

Vota questo articolo :

5/5 | 1 parere

Questo articolo vi è stato utile ?

Article utile

Article non utileNo

MerciMerci ! N'hésitez pas à poser des questions sur nos documentations si vous souhaitez plus d'informations et nous aider à les améliorer.


Vous avez noté 0 étoile(s)

Articoli simili

1mn lettura

Come posso accedere alle statistiche sulle visite al sito?

1mn lettura

Come si utilizzano i moduli di cache su LWSPanel?

3mn lettura

Velocizzate il vostro sito con LWS Cache

2mn lettura

Come si attiva il plugin LWS Cache per Wordpress?


Questions sur cet article

Fate una domanda al team LWS e alla sua comunità

RGPD : Responsable LWS-Ligne Web Services. Finalité : modération et publication publique de votre question, notification éventuelle d'une réponse. Base légale : consentement (art. 6.1.a RGPD). Conservation des emails : 90 jours après notification, 12 mois maximum sans réponse. Vous pouvez exercer vos droits via notre nos CGV - section RGPD.