Varnish is de aanbevolen full page cache voor Magento 2 in productie. Een goed geconfigureerde Varnish levert gecachte categorie- en productpagina’s in milliseconden zonder PHP of de database aan te raken. Een slecht geconfigureerde versie geeft je een lage hitrate, verouderde prijzen of de beroemde “Error 503 Backend fetch failed”.
Deze gids behandelt hoe je Varnish voor Magento 2 instelt, de cache-hitratio verbetert en de meest voorkomende problemen oplost.
Hoe Varnish past in een Magento-stack
Een typische opstelling:
Visitor → Nginx (SSL termination, port 443) → Varnish (port 6081 or 80) → Nginx/PHP-FPM backend (port 8080) → Magento
Varnish verwerkt HTTPS zelf niet, dus een webserver of load balancer ervoor beëindigt SSL en geeft gewone HTTP door aan Varnish.
Stap 1: Installeer een ondersteunde Varnish-versie
Controleer de systeemvereisten van Magento voor jouw versie om te zien welke Varnish-versies worden ondersteund, en installeer het vanuit de officiële Varnish-repository voor jouw besturingssysteem.
Stap 2: Configureer Magento om Varnish te gebruiken
In de admin: Winkels → Configuratie → Geavanceerd → Systeem → Volledige Pagina Cache, stel Cache Toepassing in op Varnish Cache.
Of via de opdrachtregel:
bin/magento config:set system/full_page_cache/caching_application 2
Vertel Magento waar Varnish zich bevindt, zodat het purge-verzoeken kan verzenden:
bin/magento setup:config:set --http-cache-hosts=127.0.0.1:6081
Stap 3: Genereer de VCL
Magento genereert een Varnish-configuratiebestand (VCL) voor je:
bin/magento varnish:vcl:generate --export-version=6 --backend-host=127.0.0.1 --backend-port=8080 --access-list=127.0.0.1 --output-file=/etc/varnish/default.vcl
Pas de exportversie aan naar jouw Varnish-hoofdf versie en de backend host/poort naar jouw backend webserver. De access-list bepaalt wie purge-verzoeken mag verzenden.
Je kunt de VCL ook exporteren vanuit de admin onder de instellingen voor de Volledige Pagina Cache.
Stap 4: Configureer de backend webserver
Je backend Nginx luistert op poort 8080 (of een andere interne poort) en draait PHP-FPM met de standaard Magento Nginx-configuratie. Varnish stuurt verzoeken daarheen.
Stap 5: Configureer SSL-terminatie
De front Nginx luistert op 443, beheert certificaten en proxy’s naar Varnish:
location / {
proxy_pass http://127.0.0.1:6081;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto https;
proxy_set_header X-Forwarded-Port 443;
proxy_buffer_size 128k;
proxy_buffers 4 256k;
proxy_busy_buffers_size 256k;
}
De X-Forwarded-Proto header vertelt Magento dat het oorspronkelijke verzoek HTTPS was. Grotere proxybuffers helpen met de grote headers van Magento.
Stap 6: Controleer of caching werkt
curl -sI https://www.example.com/some-category.html | grep -i -E "x-magento-cache|age|x-cache"
Vraag de pagina twee keer aan. Bij het tweede verzoek zou je een cache-hit moeten zien (afhankelijk van je VCL-headers, bijvoorbeeld een groeiende Age header of een hit-indicator). Gebruik varnishstat en varnishlog voor details:
varnishstat -1 | grep -E "cache_hit|cache_miss"
varnishlog -g request -q "ReqURL ~ '/some-category.html'"
Het verbeteren van de hitrate
Een lage hitrate is het meest voorkomende Varnish-probleem in Magento. Oorzaken en oplossingen:
Marketingparameters splits de cache
Elke ?utm_source=... of ?gclid=... creëert een apart cache-object. Verwijder deze parameters in vcl_recv zodat ze de cache-sleutel niet bereiken (ze zijn nog steeds beschikbaar voor je analytics in de browser). De gegenereerde Magento VCL verwijdert al enkele; breid de lijst uit met de parameters die jouw campagnes gebruiken (bijvoorbeeld fbclid, msclkid, gad_source).
Niet-cacheerbare blokken
Een enkele blok met cacheable="false" in de lay-out XML maakt de hele pagina niet-cachebaar. Zoek ernaar:
grep -r 'cacheable="false"' app/ vendor/ --include=*.xml
Verplaats gepersonaliseerde inhoud naar privé-inhoud (klantsecties) in plaats daarvan.
Cookies en headers
Aangepaste cookies of headers die per gebruiker variëren, kunnen caching voorkomen. Controleer wat uw extensies toevoegen.
Te korte TTL of te veel verwijderingen
Grote imports of extensies die de hele cache wissen na elke productopslag houden de cache koud. Wis op basis van tags in plaats van de volledige cache, en voer imports ’s nachts uit.
Cache warming
Na een implementatie of volledige flush, bezoeken de eerste bezoekers ongecachede pagina’s. Een cachewarmer die je belangrijkste URL’s crawlt, helpt.
Veelvoorkomende fouten
Fout 503 Backend ophalen mislukt
Varnish kon geen geldige reactie van de backend krijgen. Veelvoorkomende oorzaken:
- Backend is down of de poort is verkeerd
- PHP fatale fout (controleer
var/logen PHP-FPM logs) - Headers te groot: Magento verzendt grote
X-Magento-Tagsheaders op pagina’s met veel producten. Verhooghttp_resp_hdr_lenenhttp_resp_sizein de opstartparameters van Varnish. - Backend time-out: verhoog
first_byte_timeoutvoor trage pagina’s (en los de traagheid op)
Gezondheidscontrole mislukt
De gegenereerde VCL gebruikt een gezondheidscontrole op /pub/health_check.php (of /health_check.php afhankelijk van je document root). Zorg ervoor dat die URL werkt op de backend.
Prijzen of voorraad worden niet bijgewerkt
Purge-aanvragen bereiken Varnish niet. Controleer --http-cache-hosts, de toegangslijst in de VCL en de firewallregels.
Admin of checkout gecached
De standaard VCL sluit admin-, checkout- en klantpagina’s uit. Als je de VCL hebt aangepast, zorg er dan voor dat die uitsluitingen nog steeds aanwezig zijn.
Varnish vs ingebouwde cache vs CDN
| Optie | Wanneer te gebruiken |
|---|---|
| Ingebouwde Magento-cache | Ontwikkeling of zeer kleine winkels |
| Varnish | Aanbevolen voor productie |
| CDN met volledige pagina-cache | Extra laag voor wereldwijde verkeer; moet de cache-logica van Magento respecteren |
Veelgestelde vragen
Is Varnish vereist voor Magento 2?
Niet technisch, maar het wordt sterk aanbevolen voor productieprestaties.
Werkt Varnish met Hyvä?
Ja. Hyvä verandert de frontend; volledige pagina caching werkt op dezelfde manier.
Wat is de hitrate waar ik op moet mikken?
Het hangt af van verkeerspatronen, maar op cataloguspagina’s zouden de meeste anonieme verzoeken hits moeten zijn. Als de meeste verzoeken misses zijn, kijk dan naar parameters, niet-cachebare blokken en purges.
Wilt u Varnish goed afstemmen?
Ik configureer Varnish en volledige pagina-caching voor Magento 2 en los de hitrate- en 503-problemen op. Zie ook 12 redenen waarom een Magento-winkel traag is, mijn Magento 2 en Hyvä-service, of vraag een prestatiecheck aan.