Magento 2 Full Page Cache configureren: Varnish, Redis en de built-in FPC
Terug naar blog

Magento 2 Full Page Cache configureren: Varnish, Redis en de built-in FPC

AuthorRuthger Idema
11 maart 202610 min leestijd

Een Magento 2 winkel zonder Full Page Cache is 10x langzamer dan nodig. Stap voor stap uitleg over Varnish, Redis en de ingebouwde FPC — inclusief wat je wanneer gebruikt.

Magento 2 Full Page Cache configureren: Varnish, Redis en de built-in FPC

Een Magento 2 pagina zonder cache laadt in 2 tot 8 seconden. Met Varnish als Full Page Cache: 50 tot 200 milliseconden. Dat is geen exaggeratie — dat is de standaardsituatie bij klanten die met een langzame Magento-installatie bij ons komen.

Caching is het meest impactvolle prestatieverbeterende dat je in Magento 2 kunt doen. Dit artikel legt uit welke cachinglagen er zijn, hoe je ze configureert en welke combinatie je wanneer gebruikt.

Wat je leert in dit artikel

  • Het verschil tussen Varnish, Redis en de ingebouwde FPC
  • Stap voor stap Varnish instellen voor Magento 2
  • Redis configureren als sessie- en object-cache
  • Cache-invalidatie begrijpen en problemen oplossen
  • Welke combinatie zinvol is voor jouw situatie

De drie cachinglagen in Magento 2

Magento 2 heeft meerdere typen cache. Ze werken samen, niet in plaats van elkaar.

1. Full Page Cache (FPC)

De FPC slaat complete HTML-pagina's op. Bij een gecachede request hoeft Magento geen PHP te draaien, geen database te bevragen en geen templates te renderen. Het resultaat gaat direct van cache naar browser.

Magento 2 heeft een ingebouwde FPC (opgeslagen in het bestandssysteem of Redis). Voor productieomgevingen gebruik je Varnish als externe FPC — dat is 5 tot 10 keer sneller dan de ingebouwde variant.

2. Object Cache (via Redis of Memcached)

De object-cache slaat database-queryresultaten, configuratieblokken en andere herberekende data op. Elke keer dat Magento een blok rendert (productlijst, navigatie, winkelwagentje), zoekt het eerst in de object-cache.

Redis is de standaard aanbeveling. Memcached werkt ook maar heeft minder functionaliteit (geen persistentie, geen clustering).

3. Sessie-opslag (via Redis of database)

Standaard slaat Magento sessies op in het bestandssysteem. Dat werkt, maar is traag bij veel gelijktijdige gebruikers en werkt niet in een multi-node setup. Redis als sessie-backend is de betere keuze.

Varnish instellen voor Magento 2

Varnish is een HTTP-accelerator die voor je webserver staat. Het onderschept requests en serveert gecachede responses zonder PHP of de database te raken.

Stap 1: Varnish installeren

Op Ubuntu 22.04:

bash
apt-get install varnish

Controleer de versie — Magento 2.4 ondersteunt Varnish 6.x en 7.x officieel. Zie de officiële Adobe Commerce documentatie voor de meest actuele systeemvereisten.

bash
varnishd -V

Stap 2: VCL-configuratie genereren vanuit Magento

Magento 2 genereert automatisch een Varnish Configuration Language (VCL) bestand op basis van je instellingen.

Ga naar Stores > Configuration > Advanced > System > Full Page Cache. Stel Cache Application in op Varnish Cache. Klik op Export VCL for Varnish 7.

Het geëxporteerde bestand bevat alle regels voor cache-invalidatie, exclusions voor de admin, en afhandeling van cookies.

Stap 3: VCL uploaden en activeren

bash
# VCL-bestand kopiëren naar de Varnish-configuratiedirectory
cp magento2.vcl /etc/varnish/magento2.vcl

# Varnish starten met de nieuwe VCL
varnishd -f /etc/varnish/magento2.vcl -s malloc,1G -T localhost:6082 -a 0.0.0.0:6081

# Of als service herstarten
systemctl restart varnish

Stap 4: Nginx of Apache doorsturen naar Varnish

Je webserver (Nginx of Apache) moet requests doorsturen naar Varnish (port 6081) in plaats van direct PHP te serveren.

Nginx-configuratie voor Varnish:

nginx
upstream varnish {
    server 127.0.0.1:6081;
}

server {
    listen 80;
    server_name jouwwinkel.nl;

    location / {
        proxy_pass http://varnish;
        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 $scheme;
    }
}

Stap 5: Magento configureren voor Varnish

In app/etc/env.php of via de Admin:

php
'http_cache_hosts' => [
    [
        'host' => '127.0.0.1',
        'port' => '6081'
    ]
],

Dit vertelt Magento waar de Varnish-instantie staat, zodat cache-invalidatie (PURGE-requests) correct werkt.

Verificatie

bash
# Controleer of Varnish de cache raakt
curl -I https://jouwwinkel.nl/categorie/product

# Kijk naar de Age-header (hoeveel seconden gecachet)
# en X-Cache: HIT (gecached) of MISS (niet gecachet)

De eerste request geeft X-Cache: MISS. Alle volgende requests geven X-Cache: HIT en een Age-waarde die aangeeft hoe lang de pagina in cache zit.

Redis configureren voor object- en sessiecache

Redis is een in-memory datastructuur-opslag. Voor Magento 2 gebruik je twee aparte Redis-instanties: één voor de object-cache en één voor sessies.

Twee Redis-instanties opzetten

bash
# Installeren
apt-get install redis-server

# Maak twee configuratiebestanden
cp /etc/redis/redis.conf /etc/redis/redis-cache.conf
cp /etc/redis/redis.conf /etc/redis/redis-session.conf

Pas /etc/redis/redis-cache.conf aan:

port 6379
maxmemory 512mb
maxmemory-policy allkeys-lru

Pas /etc/redis/redis-session.conf aan:

port 6380
maxmemory 256mb
maxmemory-policy noeviction

De sessie-instantie gebruikt noeviction: sessies mogen nooit automatisch worden verwijderd (anders worden gebruikers uitgelogd).

Magento configureren voor Redis

In app/etc/env.php:

php
'cache' => [
    'frontend' => [
        'default' => [
            'id_prefix' => 'b0c_',
            'backend' => 'Magento\\Framework\\Cache\\Backend\\Redis',
            'backend_options' => [
                'server' => '127.0.0.1',
                'database' => '0',
                'port' => '6379',
                'password' => '',
                'compress_data' => '1',
                'compression_lib' => ''
            ]
        ],
        'page_cache' => [
            'id_prefix' => 'b0c_',
            'backend' => 'Magento\\Framework\\Cache\\Backend\\Redis',
            'backend_options' => [
                'server' => '127.0.0.1',
                'database' => '1',
                'port' => '6379',
                'compress_data' => '0'
            ]
        ]
    ]
],
'session' => [
    'save' => 'redis',
    'redis' => [
        'host' => '127.0.0.1',
        'port' => '6380',
        'password' => '',
        'timeout' => '2.5',
        'retries' => '0',
        'persistent_identifier' => '',
        'database' => '0',
        'compression_threshold' => '2048',
        'compression_library' => 'gzip',
        'log_level' => '4',
        'max_concurrency' => '6',
        'break_after_frontend' => '5',
        'break_after_adminhtml' => '30',
        'first_lifetime' => '600',
        'bot_first_lifetime' => '60',
        'bot_lifetime' => '7200',
        'disable_locking' => '0',
        'min_lifetime' => '60',
        'max_lifetime' => '2592000'
    ]
],

Cache-invalidatie begrijpen

Cache-invalidatie is waar het voor de meeste teams misgaat. Als een product wordt bijgewerkt, moet Magento de gecachede pagina's voor dat product verwijderen uit Varnish. Dit gebeurt via PURGE-requests.

Magento 2 gebruikt cache tags voor dit doel. Elke pagina krijgt tags mee (bijv. cat_p_123 voor product 123). Als product 123 wordt opgeslagen, stuurt Magento een PURGE-request naar Varnish met tag cat_p_123. Varnish verwijdert alle gecachede pagina's met die tag.

Dit werkt automatisch als je de Varnish-configuratie correct hebt ingesteld. Problemen ontstaan als:

  • De PURGE-requests worden geblokkeerd door een firewall
  • Varnish draait op een ander IP dan Magento verwacht
  • De ACL in de VCL PURGE-requests van het verkeerde IP weigert

Controleer dit via:

bash
# Test een handmatige PURGE
curl -X PURGE -H "X-Magento-Tags-Pattern: .*" http://127.0.0.1:6081/

# Kijk in de Varnish-logs
varnishlog -g request -q "ReqMethod eq 'PURGE'"

Welke combinatie voor welke situatie

SituatieAanbevolen configuratie
OntwikkelomgevingIngebouwde FPC uitgeschakeld, file-based cache
StagingIngebouwde FPC met Redis object-cache
Productie kleine shop (< €1M/jaar)Varnish + Redis object-cache + Redis sessies
Productie grote shop (> €1M/jaar)Varnish cluster + Redis Sentinel + dedicated sessie-instantie
Multi-store setupVarnish met aparte backends per store view

Veelgemaakte fouten

FPC uitgeschakeld laten in productie. Wij zien dit nog regelmatig. De Admin toont een gele waarschuwing, maar niemand heeft er ooit naar gekeken. Eén Redis-instantie voor alles. Als die instantie vol raakt en allkeys-lru actief is, worden sessies ook verwijderd. Gebruikers worden uitgelogd. Houd sessie- en object-cache altijd gescheiden. Varnish vóór SSL-terminatie plaatsen. Varnish spreekt geen HTTPS. SSL moet door Nginx of een load balancer worden afgehandeld vóórdat het request Varnish bereikt. VCL niet updaten na Magento-upgrade. Bij elke Magento minor-versie-upgrade exporteer en herlaad je de VCL opnieuw. Verouderde VCL kan cache-problemen of beveiligingslekken introduceren.

Conclusie

Full Page Cache is niet optioneel voor een productie-Magento-installatie. Zonder FPC is een laadtijd onder de 3 seconden nagenoeg onmogelijk. Met Varnish zijn laadtijden van 50 tot 200ms realistisch.

De setup is eenmalig werk van een dag of twee. De performance-winst is permanent.

Bekijk onze informatie over Magento 2 hosting voor aanbevelingen over de serverstack die wij gebruiken. En onze Magento 2 diensten als je hulp nodig hebt bij de configuratie.


Loop je tegen cache-problemen aan of wil je de performance van je Magento 2 installatie laten doorlichten? Neem contact op voor een technisch gesprek.

Veelgestelde vragen

Kan ik Varnish gebruiken als ik op shared hosting zit?

Nee. Varnish vereist root-toegang tot de server en een dedicated process. Shared hosting ondersteunt dit niet. Voor Varnish heb je een VPS of dedicated server nodig.

Wat doet de ESI (Edge Side Includes) optie in Magento 2?

ESI stelt Magento in staat om dynamische blokken (zoals het winkelwagentje en de inlogstatus) apart van de rest van de pagina te cachen. De hoofdpagina wordt gecachet door Varnish, maar het winkelwagentje wordt apart opgehaald. Dit maakt personalisatie mogelijk zonder de hele pagina uit de cache te halen.

Hoe weet ik of mijn cache correct werkt?

Controleer de X-Cache response-header via curl of browser-devtools. HIT betekent dat Varnish de gecachede versie serveert. Kijk ook naar de Age-header — die geeft aan hoeveel seconden geleden de pagina gecachet is.

Wat is het verschil tussen database 0 en database 1 in Redis?

Redis gebruikt logische databases (0–15) als naamruimten. Door object-cache en page-cache in verschillende databases te plaatsen (0 en 1), kun je ze apart flushen. redis-cli -n 1 FLUSHDB wist alleen de page-cache zonder de object-cache aan te raken.

Moet ik Redis ook voor de ingebouwde FPC gebruiken als ik Varnish heb?

Als Varnish actief is, behandelt Varnish alle FPC-requests. De ingebouwde Magento FPC is dan de fallback. Het is nuttig om die ook op Redis te zetten (in plaats van het bestandssysteem) zodat je geen schijf-I/O hebt als Varnish toch de request doorgeeft.

Ruthger Idema

Geschreven door Ruthger Idema

15+ jaar ervaring in e-commerce development. Gespecialiseerd in Magento, Shopify en Laravel maatwerk.

Meer over ons team →
Deel dit artikel:

Wil je jouw e-commerce naar het volgende niveau?

Plan een vrijblijvend gesprek met onze experts over Magento, Shopify of Laravel maatwerk.

Plan een Tech Check