Cache tags + Varnish
Varnish Cache is een webapplicatieversneller, ook wel een HTTP caching reverse proxy genoemd. Varnish wordt gebruikt op duizenden Drupal-sites om de prestaties van paginaladingen met een factor 10-1000 te verhogen, en kan gebruikt worden met cache tags om cache-invalidering eenvoudiger te maken.
Voor basisintegratie van cache tags moet je drie dingen doen om ervoor te zorgen dat Varnish goed samenwerkt met de cache tags die Drupal genereert:
- Werk de VCL van Varnish bij zodat BAN-verzoeken correct worden verwerkt.
- Stuur een cache tags header mee (bijv. X-Cache-Tags) bij elk verzoek, met daarin een door spaties gescheiden lijst van alle cache tags van de pagina.
- Stuur een BAN-verzoek met de juiste cache tags telkens wanneer inhoud of configuratie wordt bijgewerkt en de pagina’s met die cache tags ongeldig moeten worden gemaakt.
Varnish VCL bijwerken
Het Symfony FOSHttpCache-pakket bevat uitstekende documentatie over de vereiste VCL-aanpassingen voor cache tags, maar hier zijn de minimale VCL-wijzigingen om te starten (voor Varnish 4.x):
Binnen vcl_recv:
sub vcl_recv {
...
# Alleen BAN-verzoeken toestaan vanaf IP-adressen in de 'purge' ACL.
if (req.method == "BAN") {
# Zelfde ACL-controle als hierboven:
if (!client.ip ~ purge) {
return (synth(403, "Not allowed."));
}
# Logica voor de ban, gebruikmakend van de X-Cache-Tags header.
if (req.http.X-Cache-Tags) {
ban("obj.http.X-Cache-Tags ~ " + req.http.X-Cache-Tags);
}
else {
return (synth(403, "X-Cache-Tags header missing."));
}
# Retourneer een synthetische pagina zodat het verzoek niet naar de backend gaat.
return (synth(200, "Ban added."));
}
}
Binnen vcl_backend_response:
sub vcl_backend_response {
# Stel ban-lurker-vriendelijke custom headers in.
set beresp.http.X-Url = bereq.url;
set beresp.http.X-Host = bereq.http.host;
...
}
Binnen vcl_deliver:
sub vcl_deliver {
# Verwijder ban-lurker-vriendelijke custom headers bij levering aan de client.
unset resp.http.X-Url;
unset resp.http.X-Host;
# Commentarieer deze uit voor eenvoudigere Drupal cache tag debugging tijdens development.
unset resp.http.X-Cache-Tags;
unset resp.http.X-Cache-Contexts;
...
}
Vergeet niet Varnish opnieuw te starten nadat je de VCL hebt aangepast!
Cache header versturen
Je kunt een van de volgende modules inschakelen om Drupal een HTTP-header te laten uitsturen met de cache tags:
| Project | Module | Header |
| Varnish Purger | Varnish Purger Tags (varnish_purge_tags) | Cache-Tags |
| Generic HTTP Purger | Generic HTTP Tags Header (purge_purger_http_tagsheader) | Purge-Cache-Tags |
Merk op dat in sommige versies vóór 8.x-3.0-beta5 de Purge-module automatisch de header Purge-Cache-Tags instelde, maar dat dit verwijderd is omdat besloten werd dat submodules hiervoor verantwoordelijk moeten zijn.
BAN-verzoek versturen bij wijziging van inhoud of configuratie
Met de Generic HTTP Purger-module kun je naar de Purge-configuratiepagina gaan (admin/config/development/performance/purge) en een HTTP Purger toevoegen.
Voer de gegevens van je Varnish-server in (hostnaam, poort, pad, enz.) en geef in de configuratie “Headers” de volgende header in:
- Header: X-Cache-Tags
- Waarde: [invalidation:expression]
Zodra je deze Purge-configuratie opslaat en een cronjob instelt om de purge-queue te verwerken (drush p-queue-work), zou Varnish pagina’s moeten beginnen te bannen zodra de purge-queue bans uitstuurt!
Sommige notities in deze documentatie zijn aangepast uit de volgende bronnen: