Tvinga Varnish-cache på LWS

Procédure

I denna dokumentation kommer vi steg för steg att förklara hur du får Varnish och webbläsarna att behålla dina resurser i cache, även när de skickar begäranden Pragma: no‑cache eller Cache‑Control: no-cache.

1. Kontext och LWS-arkitektur

De delade hostingpaketen och de hanterade cPanel/VPS-lösningarna från LWS bygger på stacken:

Webbläsare ⇄ NGINX (SSL + HTTP/2) ⇄ Varnish Cache ⇄ Apache/PHP-FPM

  • NGINX hanterar TLS och komprimerar innehållet.
  • Varnish (Fastest Cache) är placerad som reverse‑proxy för att lagra HTTP-svar i minnet.
  • Apache eller PHP‑FPM genererar det slutliga svaret när Varnish inte har en HIT.

När allt är korrekt konfigurerat kan Varnish leverera upp till 1000 gånger snabbare än direkt åtkomst till PHP, samtidigt som serverns CPU belastas mindre.

2. Påminnelse: hur avgör Varnish vad som ska cachas?

Element Påverkan på cachen Hur man påverkar det
Metod Endast GET och HEAD är giltiga Undvik POST för offentliga sidor
Svarshuvuden Cache-Control, Expires, Pragma Bestämmer varaktighet och omfattning Ställ in via .htaccess (se §3)
Cookies / Set-Cookie En cookie närvarande = ingen cachelagring som standard Ta bort eller neutralisera onödiga cookies
HTTP-status 200, 203, 301, 302, 404, 410 kan cachas Ingen åtgärd, men undvik 500!

Trucs et astuces


Varnish ignorerar som standard Cache-Control: no-cache som skickas av webbläsaren för statiska filer, men respekterar "revalidation logic" om objektet redan finns i cache.

3. Styr livslängden via .htaccess

Aktivera modulen mod_headers (detta är standard hos LWS) och placera sedan följande snippet där du vill:

⌨ Kommando

  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 : varaktighet (i sekunder) i webbläsaren.
  • s-maxage : specifik varaktighet för delade cacheminnen (Varnish/CDN).
  • stale-while-revalidate : gör att Varnish kan leverera ett föråldrat innehåll medan det uppdateras i bakgrunden.
  • stale-if-error : levererar den föråldrade versionen om backend svarar med fel (fail‑safe).

3.1. Målstyrning per mapp

Om samma .htaccess-fil placeras i mappen "/images/" tillämpas regeln endast på mappen "images".

3.2. Målstyrning per filändelse

⌨ Kommando

  
    Header set Cache-Control "public, max-age=2592000, s-maxage=2592000, immutable"
  

immutable : indikerar för webbläsaren att ingen revalidering behövs så länge objektet inte har gått ut; perfekt för versionerade filer (style.483bf.css).

3.3. Kort cache för HTML

⌨ Kommando

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

Upphör efter 5 min på klientsidan och 10 min i Varnish, därefter obligatorisk revalidering.

4. Konkreta användningsscenarier

Verkligt fall .htaccess-fragment Varför?
Landningssida uppdateras varje timme max-age=600, s-maxage=1200 Besökare får nästan live-data utan att överbelasta PHP
Versionerade CSS/JS-filer max-age=31536000, immutable Nästan ingen trafik till servern, omedelbar laddning
Produktbilder för e‑handel max-age=604800 Minskar TTFB, snabbar upp katalogen
Back‑office / wp-admin no-store, private Undviker att lagra känsliga uppgifter i den delade cachen

5. Rensa eller ogiltigförklara cachen

Från ditt webbhotell (PHP-script på din webbplats, Cron-jobb eller SSH-terminal) kräver rensning av Varnish-cachen ingen token:

  • En sida:
⌨ Kommando
curl -X PURGE https://exemple.com/chemin/ressource.jpg
  • En hel mapp, via reguljärt uttryck:
⌨ Kommando
curl -X PURGE -H 'X-Purge-Method: regex' 'https://exemple.com/images/.*'
  • Hela webbplatsen:
⌨ Kommando
curl -X FULLPURGE https://exemple.com
  • I PHP, till exempel efter uppdatering av ett innehåll:
Kod
$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 refusee
curl_close($ch);

Ett komplett script, redo för ett Cron-jobb, finns i hjälpen Accélérer la vitesse de votre site avec Fastest Cache. Du kan också rensa cachen från din panel med knappen « Purger le cache » i Fastest Cache.

6. Testa och felsöka

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

Titta på:

  • Age: 356 → Varnish levererade ett svar som är 356 s gammalt.
  • Cache-Control: public, max-age=2592000, s-maxage=2592000, immutable
  • X-Cache: HIT (eller MISS).

Med Chrome/Edge: DevTools > Network > Disable cache kan simulera en förstagångsbesökare.

7. Vanliga fallgropar

  1. Onödiga cookies : många WordPress-teman sätter en cookie även för offentliga sidor. Ta bort dem eller inaktivera dem via functions.php.
  2. Frågesträngar : som standard skapar ?v=123 en ny post i cachen. Versionsnumrera hellre i filnamnet.
  3. Känsligt innehåll : formulär, sidor för kundområde ➡ no-store, private, max-age=0.
  4. Brotli/Gzip-komprimering : aktivera dem före Varnish-lagret för att undvika dubbel cachelagring.

8. Sammanfattande bästa praxis

  • Använd s-maxage ⩾ max-age för att behålla en proxycache längre än webbläsarens cache.
  • Applicera immutable på alla filer vars namn innehåller en hash.
  • Blanda inte föråldrad Expires med max-age, utom för äldre webbläsare.
  • Dokumentera dina TTL-värden i filen CACHE_POLICY.md för teamet.

9. Användbara resurser

✅ Din Varnish-cache är nu under kontroll!

help.lws.net/a/1949
Var den här artikeln till hjälp?

Ja

Nej

Läst 7 650 gånger

Tack! Ställ gärna frågor om vår dokumentation om du vill ha mer information och hjälp oss att förbättra den.

Liknande artiklar

En fråga om den här artikeln?

Ställ den till LWS-teamet och communityn. Svaret publiceras efter moderering.

Ställ en fråga till AWS-teamet och dess community

GDPR: Personuppgiftsansvarig: LWS-Ligne Web Services. Ändamål: moderering och offentlig publicering av din fråga, eventuellt meddelande om ett svar. Rättslig grund: samtycke (art. 6.1 a GDPR). Lagring av e-postadresser: 90 dagar efter meddelandet, högst 12 månader utan svar. För att utöva dina rättigheter, se GDPR-avsnittet i våra allmänna villkor.