logo

Extra Block Types (EBT) - Nieuwe Layout Builder ervaringâť—

Extra Block Types (EBT) - gestileerde, aanpasbare bloktypes: Slideshows, Tabs, Cards, Accordions en vele andere. Ingebouwde instellingen voor achtergrond, DOM Box, javascript-plugins. Ervaar vandaag al de toekomst van layout building.

Demo EBT-modules Download EBT-modules

âť—Extra Paragraph Types (EPT) - Nieuwe Paragraphs ervaring

Extra Paragraph Types (EPT) - analoge op paragrafen gebaseerde set modules.

Demo EPT-modules Download EPT-modules

Scroll
03/10/2025, by Ivan

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: