Varnish-caching forceren op LWS

Procédure

In deze documentatie leggen we stap voor stap uit hoe u Varnish en browsers kunt dwingen uw resources in cache te houden, zelfs wanneer zij verzoeken Pragma: no‑cache of Cache‑Control: no-cache versturen.

1. Context en LWS-architectuur

De gedeelde hosting- en beheerde cPanel/VPS-formules van LWS zijn gebaseerd op de stack:

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

  • NGINX beheert TLS en comprimeert de inhoud.
  • Varnish (Fastest Cache) wordt als reverse-proxy geplaatst om HTTP-antwoorden in het geheugen op te slaan.
  • Apache of PHP-FPM genereren het uiteindelijke antwoord wanneer Varnish geen HIT heeft.

Wanneer alles correct is geconfigureerd, kan Varnish tot 1000 keer sneller leveren dan een directe toegang tot PHP, terwijl het de CPU van de server ontlast.

2. Herinnering: hoe beslist Varnish om te cachen?

Element Impact op de cache Hoe beïnvloeden
Methode Alleen GET en HEAD komen in aanmerking Vermijd POST voor openbare pagina's
Response-headers Cache-Control, Expires, Pragma Bepalen de duur en de scope Instellen via .htaccess (zie §3)
Cookies / Set-Cookie Een aanwezige cookie = standaard geen caching Onnodige cookies verwijderen of neutraliseren
HTTP-status 200, 203, 301, 302, 404, 410 zijn cachebaar Geen actie, maar vermijd 500's!

Trucs et astuces


Varnish negeert standaard de Cache-Control: no-cache die door de browser wordt verzonden voor statische bestanden, maar respecteert de "revalidation logic" als het object al in de cache staat.

3. De levensduur beheren via .htaccess

Activeer de module mod_headers (dit is standaard het geval bij LWS) en plaats vervolgens het onderstaande snippet waar u wilt:

⌨ Opdracht

  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 : duur (in seconden) in de browser.
  • s-maxage : specifieke duur voor gedeelde caches (Varnish/CDN).
  • stale-while-revalidate : laat Varnish toe om verouderde inhoud te serveren terwijl het deze op de achtergrond ververst.
  • stale-if-error : dient de verouderde versie als de backend een fout retourneert (fail-safe).

3.1. Doelgroepering per map

Door hetzelfde .htaccess-bestand in de map "/images/" te plaatsen, wordt de regel alleen toegepast op de map "images".

3.2. Doelgroepering per extensie

⌨ Opdracht

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

immutable : geeft aan de browser aan dat geen revalidatie nodig is zolang het object niet is verlopen; ideaal voor versiebeheerbestanden (style.483bf.css).

3.3. Korte cache voor HTML

⌨ Opdracht

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

Verloopt na 5 min aan clientzijde en 10 min aan Varnish-zijde, daarna verplichte revalidatie.

4. Concrete gebruiksscenario's

Reëel geval Fragment van .htaccess Waarom?
Landingpagina die elk uur wordt bijgewerkt max-age=600, s-maxage=1200 Bezoekers krijgen gegevens die “bijna live” zijn zonder PHP te overbelasten
Versiebeheerde CSS/JS max-age=31536000, immutable Vrijwel geen verkeer op de server, directe laadtijd
Productafbeeldingen voor e-commerce max-age=604800 Verlaagt de TTFB, versnelt de catalogus
Backoffice / wp-admin no-store, private Voorkomt dat gevoelige gegevens in de gedeelde cache terechtkomen

5. De cache legen of ongeldig maken

Vanaf uw hosting (PHP-script van uw site, Cron-taak of SSH-terminal) vereist het legen van de Varnish-cache geen enkel token:

  • Eén pagina:
⌨ Opdracht
curl -X PURGE https://exemple.com/chemin/ressource.jpg
  • Een volledige map, via reguliere expressie:
⌨ Opdracht
curl -X PURGE -H 'X-Purge-Method: regex' 'https://exemple.com/images/.*'
  • De hele site:
⌨ Opdracht
curl -X FULLPURGE https://exemple.com
  • In PHP, bijvoorbeeld na het bijwerken van een inhoud:
Code
$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 geweigerd
curl_close($ch);

Een compleet script, klaar voor een Cron-taak, wordt aangeboden in de hulp De snelheid van uw site versnellen met Fastest Cache. U kunt de cache ook legen vanuit uw paneel, met de knop « Cache legen » van Fastest Cache.

6. Testen en debuggen

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

Kijk naar:

  • Age: 356 → Varnish heeft een antwoord van 356 s oud geleverd.
  • Cache-Control: public, max-age=2592000, s-maxage=2592000, immutable
  • X-Cache: HIT (of MISS).

Met Chrome/Edge: DevTools > Network > Disable cache kan een eerste bezoeker simuleren.

7. Veelvoorkomende valkuilen

  1. Onnodige cookies : veel WordPress-thema's plaatsen een cookie zelfs voor openbare pagina's. Verwijder ze of schakel ze uit via functions.php.
  2. Querystrings : standaard maakt ?v=123 een nieuw item aan in de cache. Gebruik liever versiebeheer in de bestandsnaam.
  3. Gevoelige inhoud : formulieren, pagina's van de klantenruimte ➡ no-store, private, max-age=0.
  4. Brotli/Gzip-compressie : activeer deze vóór de Varnish-laag om dubbele caching te vermijden.

8. Samenvattende best practices

  • Gebruik s-maxage ⩾ max-age om een proxycache langer te bewaren dan die van de browser.
  • Plaats immutable op elk bestand waarvan de naam een hash bevat.
  • Combineer verouderde Expires niet met max-age, behalve voor oudere browsers.
  • Documenteer uw TTL's in een bestand CACHE_POLICY.md voor het team.

9. Nuttige bronnen

✅ Uw Varnish-cache staat nu onder controle!

help.lws.net/a/1949
Was dit artikel nuttig?

Ja

Geen

7 648 keer gelezen

Bedankt! Stel gerust vragen over onze documentatie als u meer informatie wilt, en help ons die te verbeteren.

Vergelijkbare artikelen

Een vraag over dit artikel?

Stel ze aan het LWS-team en de community. Het antwoord wordt na moderatie gepubliceerd.

Stel een vraag aan het LWS-team en de gemeenschap

AVG: Verwerkingsverantwoordelijke: LWS-Ligne Web Services. Doel: moderatie en openbare publicatie van uw vraag, eventuele melding van een antwoord. Rechtsgrond: toestemming (art. 6, lid 1, a AVG). Bewaartermijn e-mailadressen: 90 dagen na de melding, maximaal 12 maanden zonder antwoord. Om uw rechten uit te oefenen, raadpleeg de AVG-sectie van onze algemene voorwaarden.