Varnish Cache voor Magento 2: Installatie, Configuratie en Probleemoplossing

Varnish kan ervoor zorgen dat Magento 2-pagina's in milliseconden laden, als het goed is geconfigureerd. Deze gids behandelt de installatie, de VCL, SSL-terminatie, hitrate, het legen van de cache en veelvoorkomende fouten zoals 503 Backend fetch failed.

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/log en PHP-FPM logs)
  • Headers te groot: Magento verzendt grote X-Magento-Tags headers op pagina’s met veel producten. Verhoog http_resp_hdr_len en http_resp_size in de opstartparameters van Varnish.
  • Backend time-out: verhoog first_byte_timeout voor 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.