Definitie
Varnish is een HTTP-reverse proxy die complete pagina's in het geheugen cachet en ze zonder tussenkomst van PHP serveert. Het is de aanbevolen full page cache voor Magento 2.
Wat is Varnish?
Varnish Cache is open-source software die vóór je webserver staat. Een request komt eerst bij Varnish binnen. Heeft Varnish de pagina in het geheugen, dan stuurt het die direct terug. Zo niet, dan haalt het de pagina op bij de backend, bewaart een kopie en levert hem af.
Het gedrag stel je in met VCL, de Varnish Configuration Language. Daarin bepaal je welke requests gecachet worden, welke cookies of parameters genegeerd worden, hoe lang een object geldig blijft en hoe purges werken. Varnish spreekt zelf geen HTTPS; daarvoor zet je meestal nginx of een CDN ervoor die TLS afhandelt.
Varnish bewaart pagina's in het werkgeheugen. Dat maakt het snel, maar ook beperkt: wat niet in het geheugen past, wordt verdrongen. Hoeveel geheugen je nodig hebt, hangt af van het aantal pagina's, store views en klantgroepen. Elke combinatie is een aparte cache-entry.
Waarom het ertoe doet voor webshops
Voor Magento is Varnish de snelste manier om de TTFB van categorie-, product- en CMS-pagina's omlaag te krijgen. Uit het geheugen serveren is sneller dan de ingebouwde cache, en PHP wordt helemaal niet aangesproken. Dat ontlast de server bij piekmomenten en bij crawlers die duizenden pagina's achter elkaar ophalen.
De SEO-winst loopt via snelheid en stabiliteit. Snellere TTFB helpt FCP en LCP. Minder serverbelasting betekent minder 5xx-fouten en timeouts, waardoor Google de crawlsnelheid niet hoeft terug te schroeven.
Magento maakt per klantgroep, valuta en store aparte cachevarianten via de X-Magento-Vary-cookie. Hoe meer klantgroepen met eigen prijzen, hoe meer varianten. Voor B2B-shops met veel klantgroepen daalt de hitratio daardoor. Dat is geen reden om Varnish te laten liggen, wel om te meten hoeveel pagina's echt uit de cache komen.
Zo werkt het met Magento
Magento heeft volledige Varnish-ondersteuning. Onder Stores > Configuration > Advanced > System > Full Page Cache kies je Varnish als Caching Application en exporteer je een VCL-bestand dat bij je Varnish-versie past. Dat bestand regelt onder meer de cache-tags, de afhandeling van de X-Magento-Vary-cookie voor klantgroepen en valuta, en de health check.
Bij een productwijziging stuurt Magento een PURGE-request met een tag-patroon naar Varnish. Alleen de pagina's met die tags verdwijnen uit de cache. Daarvoor moet het IP van je Magento-server in de purge-ACL staan en moet http_cache_hosts in env.php kloppen. Klopt dat niet, dan blijven oude prijzen staan.
Hostingpartijen als Hypernode leveren Varnish als optie die je per site aanzet. In Laravel kun je Varnish ook gebruiken, maar dan schrijf je de VCL en de purge-logica zelf. Shopify heeft eigen caching; Varnish speelt daar geen rol.
Je controleert de werking met varnishstat voor de hitratio en varnishlog voor losse requests. Een hitratio die laag blijft, wijst meestal op cookies of parameters die de cache-sleutel onnodig uniek maken.
Veelgemaakte fouten
De standaard-VCL nooit bijwerken na een Magento- of Varnish-upgrade. Trackingparameters zoals gclid, fbclid en utm_* niet uit de cache-sleutel strippen, waardoor elke advertentieklik een cache-miss is. Te kleine geheugenallocatie, waardoor Varnish pagina's eruit gooit voordat ze een tweede keer worden opgevraagd. En geen grace mode, zodat bij een trage backend alle bezoekers op een timeout wachten in plaats van een iets oudere pagina te krijgen.
Plan de VCL-controle bij elke grote Magento-upgrade in. Exporteer de nieuwe VCL, vergelijk die met de draaiende versie en neem eigen aanpassingen bewust over.
Trackingparameters strippen in VCL
sub vcl_recv {
if (req.url ~ "(\?|&)(utm_[a-z]+|gclid|fbclid)=") {
set req.url = regsuball(req.url, "(utm_[a-z]+|gclid|fbclid)=[^&]+&?", "");
set req.url = regsub(req.url, "[?&]+$", "");
}
}Verder lezen
Veelgestelde vragen
Heb ik Varnish nodig voor Magento?+
Voor productie is het de aanbevolen full page cache. De ingebouwde cache werkt ook, maar Varnish is sneller en ontlast PHP volledig.
Ondersteunt Varnish HTTPS?+
Varnish Cache zelf niet. Je zet er nginx of een CDN voor die TLS afhandelt en het verkeer intern doorgeeft.
Waarom zie ik oude prijzen na een wijziging?+
Meestal komen purge-requests niet aan. Controleer http_cache_hosts in env.php en de purge-ACL in je VCL.
Meer begrippen over techniek & snelheid
- Back/forward cache (bfcache)
- CDN (content delivery network)
- Client-side rendering (CSR)
- CLS (Cumulative Layout Shift)
- Core Web Vitals
- Critical CSS
- CrUX (Chrome UX Report)
- FCP (First Contentful Paint)
- FID (First Input Delay)
- Full page cache
- Headless commerce
- HTTPS
- Hydration
- INP (Interaction to Next Paint)
- JavaScript-SEO
- Lazy loading
- LCP (Largest Contentful Paint)
- Lighthouse
- Mobile-first indexing
- Preload en fetchpriority
- PWA (progressive web app)
- Server-side rendering (SSR)
- Third-party scripts
- TTFB (Time to First Byte)
- WebP en AVIF
