Een correct geconfigureerde Varnish-server serveert pagina's in onder de 50 milliseconden. Zonder cache doet Magento er gemiddeld 800ms tot 2 seconden over. Dit is hoe je Varnish installeert, configureert en debugt.
Varnish configureren voor Magento 2 — stap voor stap
Een Magento 2 pagina zonder cache duurt gemiddeld 800ms tot 2 seconden. Met Varnish als full page cache is dat onder de 50 milliseconden. Dat is geen kleine optimalisatie — dat is een ander gebruikerservaring.
Magento heeft een ingebouwde full page cache, maar die slaat op in de bestandssysteemcache of Redis. Varnish zit als proxy voor je webserver en serveert gecachte responses vanuit RAM. Dat is de reden voor het snelheidsverschil.
Dit artikel beschrijft de volledige installatie, configuratie en debugcyclus.
Wat je leert in dit artikel
- Hoe Varnish werkt als caching-laag voor Magento 2
- Installatie op Ubuntu/Debian
- Magento VCL configureren
- Cache invalidation via PURGE-requests
- Debugging met
varnishlogenvarnishstat
Hoe Varnish werkt
Varnish plaatst zich tussen de gebruiker en je webserver (Nginx of Apache). De eerste keer dat een pagina wordt opgevraagd, haal Varnish de response op bij de webserver en slaat die op in RAM. Elke volgende request voor dezelfde URL krijgt de gecachte versie — zonder dat Magento of PHP iets hoeft te doen.
Gebruiker → Varnish (poort 80/443) → Nginx (poort 8080) → PHP-FPM → Magento
↓
(bij cache hit)
Direct response vanuit RAM
Magento communiceert met Varnish via PURGE-requests. Wanneer een product of pagina wordt bijgewerkt, stuurt Magento een PURGE-request naar Varnish, die de betreffende cache-entries verwijdert.
Installatie op Ubuntu 22.04
# Stap 1: Varnish installeren
sudo apt-get update
sudo apt-get install varnish -y
# Stap 2: versie controleren (Magento 2.4 ondersteunt Varnish 6.x en 7.x)
varnishd -V
Magento 2.4.x ondersteunt officieel Varnish 6.5, 7.3 en 7.4. Gebruik geen oudere versies — de VCL-syntax verschilt.
Nginx aanpassen naar poort 8080
Varnish luistert op poort 80. Nginx moet opschuiven naar 8080.
# /etc/nginx/sites-available/jouwshop.nl
server {
listen 8080;
server_name jouwshop.nl;
# ... rest van je Nginx-configuratie
}
Varnish configureren op poort 80
# /etc/default/varnish
DAEMON_OPTS="-a :80 \
-T localhost:6082 \
-f /etc/varnish/default.vcl \
-S /etc/varnish/secret \
-s malloc,256m"
De malloc,256m parameter geeft Varnish 256MB RAM voor cache. Stel dit in op 20-30% van het beschikbare servergeheugen, afhankelijk van het aantal unieke pagina's in je shop.
VCL configureren vanuit Magento
Magento genereert automatisch een VCL-bestand dat je kunt downloaden.
# In de Magento CLI
php bin/magento varnish:vcl:generate --output-file /etc/varnish/default.vcl
Of via de Admin: Stores > Configuration > Advanced > System > Full Page Cache > Varnish Configuration > Export VCL for Varnish.
De gegenereerde VCL aanpassen
Het gegenereerde VCL-bestand bevat een werkende basisconfiguratie. Een paar secties die je moet begrijpen:
# Backend: jouw Nginx-server
backend default {
.host = "127.0.0.1";
.port = "8080";
.first_byte_timeout = 600s;
.connect_timeout = 300s;
.between_bytes_timeout = 300s;
}
# Toegestane IP's voor PURGE-requests
acl purge {
"localhost";
"127.0.0.1";
"::1";
# Voeg hier het IP van je applicatieserver toe als dat anders is
}
Cookies en caching
Magento gebruikt cookies voor sessie en winkelwagen. Varnish slaat standaard geen responses op als er cookies aanwezig zijn. De VCL regelt dit:
sub vcl_recv {
# Verwijder cookies die caching niet mogen blokkeren
if (req.http.cookie) {
# Bewaar alleen Magento-gerelateerde cookies
set req.http.cookie = regsuball(req.http.cookie, ";? *[a-zA-Z0-9_-]+=[^;]+", "");
if (req.http.cookie ~ "^\s*quot;) {
unset req.http.cookie;
}
}
# PURGE-requests alleen toestaan van bekende IP's
if (req.method == "PURGE") {
if (!client.ip ~ purge) {
return (synth(405, "Not allowed"));
}
return (purge);
}
}
Magento instellen op Varnish
# Stel Varnish in als full page cache backend
php bin/magento config:set system/full_page_cache/caching_application 2
# Stel het Varnish-host en -poort in
php bin/magento config:set system/full_page_cache/varnish/access_list "localhost"
php bin/magento config:set system/full_page_cache/varnish/backend_host "localhost"
php bin/magento config:set system/full_page_cache/varnish/backend_port "8080"
# Cache legen
php bin/magento cache:flush
Controleer in de Admin onder System > Cache Management of "Varnish Cache" als caching-methode is geselecteerd.
Cache invalidation
Wanneer een productpagina wordt bijgewerkt, moet Varnish die pagina uit de cache verwijderen. Magento doet dit via PURGE-requests met cache tags.
Magento voegt aan elke response een X-Magento-Tags-header toe met de cache tags voor die pagina:
X-Magento-Tags: cat_1,cat_12,store_1,cms_b,FPC
Bij een productupdate stuurt Magento een PURGE-request met die tags. Varnish verwijdert alle gecachte responses die die tags bevatten.
# Cache tags verwerken in VCL
sub vcl_recv {
if (req.method == "PURGE") {
if (req.http.X-Magento-Tags-Pattern) {
ban("obj.http.X-Magento-Tags ~ " + req.http.X-Magento-Tags-Pattern);
return (synth(200, "Banned"));
}
}
}
sub vcl_backend_response {
# Cache tags doorsturen naar gecachte object
set beresp.http.X-Magento-Tags = beresp.http.X-Magento-Tags;
}
Varnish debuggen
varnishstat: statistieken in real-time
varnishstat
Let op deze metrics:
| Metric | Betekenis | Streefwaarde |
|---|---|---|
MAIN.cache_hit | Requests beantwoord vanuit cache | Zo hoog mogelijk |
MAIN.cache_miss | Requests doorgestuurd naar backend | Zo laag mogelijk |
MAIN.cache_hitpass | Requests die cache bypassen | Analyseer oorzaak |
MAIN.n_object | Aantal objecten in cache | Afhankelijk van shop |
Een cache hit ratio onder de 80% wijst op een configuratieprobleem. Controleer of cookies correct worden verwijderd.
varnishlog: request-level logging
# Bekijk alle requests in real-time
varnishlog
# Filter op een specifieke URL
varnishlog -q 'ReqURL ~ "/categorie/shirts"'
# Bekijk alleen cache misses
varnishlog -q 'VCL_call eq "MISS"'
Controleren of een response gecached is
curl -I https://jouwshop.nl/categorie/shirts | grep X-Cache
# X-Cache: HIT (gecached door Varnish)
# X-Cache: MISS (niet gecached, request ging naar Magento)
Voeg dit toe aan je VCL om de header mee te sturen:
sub vcl_deliver {
if (obj.hits > 0) {
set resp.http.X-Cache = "HIT";
} else {
set resp.http.X-Cache = "MISS";
}
}
Veelgemaakte fouten
- HTTPS niet via Varnish laten lopen — Varnish zelf ondersteunt geen SSL. Zet Nginx of HAProxy als SSL-terminator voor Varnish:
Gebruiker → Nginx (443, SSL termination) → Varnish (80) → Nginx (8080).
- Vergeten Health Checks te configureren — Als Magento tijdelijk uitvalt, blijft Varnish requests sturen naar een onbereikbare backend. Configureer health checks in de VCL.
- Cache te klein instellen — Als de cache vol is, gooit Varnish oudere objecten weg (LRU eviction). Monitor
MAIN.n_lru_nukedinvarnishstat. Als dat hoog is, vergroot de cache.
- Checkout-pagina's cachen — Checkout, winkelwagen en My Account mogen nooit gecached worden. De gegenereerde Magento VCL sluit deze uit, maar controleer dit bij aanpassingen.
Best practices
| Practice | Waarom |
|---|---|
| Sla VCL op in versiebeheer | Wijzigingen zijn traceerbaar en herstelbaar |
| Test cache invalidation na productwijzigingen | Verouderde cache is erger dan geen cache |
| Monitor cache hit ratio dagelijks | Een dalende ratio wijst op een probleem |
Gebruik grace mode | Serveert verouderde cache als backend traag is |
Stel beresp.ttl per pagina-type in | Productpagina's langer cachen dan zoekresultaten |
Conclusie
Varnish is de snelste full page cache-oplossing voor Magento 2. De installatie kost een middag. De opbrengst — pagina's die in 50ms laden in plaats van 800ms — is permanent.
De kritieke stap zit niet in de installatie maar in de configuratie. Cookies, cache invalidation en HTTPS-terminatie moeten correct zijn. Gebruik de Magento-gegenereerde VCL als uitgangspunt en bouw daarop verder.
Meer weten over Magento hosting en performance? Bekijk onze Magento hosting-pagina of ons artikel over Magento 2 full page cache configureren. Onze Magento 2 diensten omvatten ook performance-audits waarbij we je volledige cachingstack doorlichten. Voor geoptimaliseerde Magento-hosting raden wij Hypernode aan.
Heeft je Magento 2 shop een trage TTFB? Neem contact op voor een vrijblijvende performance-analyse.

Geschreven door Ruthger Idema
15+ jaar ervaring in e-commerce development. Gespecialiseerd in Magento, Shopify en Laravel maatwerk.
Meer over ons team →