Cache-Tags + Varnish
Varnish Cache ist ein Webanwendungs-Beschleuniger, auch bekannt als HTTP-Cache-Proxy-Server. Varnish wird auf Tausenden Drupal-Websites eingesetzt, um die Seitenladeleistung um das 10- bis 1000-fache zu steigern, und kann mit Cache-Tags verwendet werden, um das Leeren des Caches zu vereinfachen.
Für die grundlegende Integration von Cache-Tags müssen Sie drei Dinge tun, um sicherzustellen, dass Varnish gut mit den von Drupal generierten Cache-Tags zusammenarbeitet:
- Aktualisieren Sie die Varnish VCL, damit BAN-Anfragen korrekt verarbeitet werden.
- Senden Sie den Cache-Tags-Header (z. B. X-Cache-Tags) mit jeder Anfrage, der eine durch Leerzeichen getrennte Liste aller Cache-Tags der Seite enthält.
- Senden Sie bei jeder Aktualisierung von Inhalt oder Konfiguration eine BAN-Anfrage mit den entsprechenden Cache-Tags, sodass Seiten mit diesen Cache-Tags invalidiert werden.
Varnish VCL aktualisieren
Das Symfony-Paket FOSHttpCache enthält eine ausgezeichnete Dokumentation zu den notwendigen VCL-Anpassungen für Cache-Tags. Hier sind die minimal erforderlichen VCL-Änderungen für den Einstieg (für Varnish 4.x):
Innerhalb von vcl_recv
:
sub vcl_recv { ... # BAN-Anfragen nur von IP-Adressen im 'purge' ACL erlauben. if (req.method == "BAN") { # Gleiche ACL-Prüfung wie oben: if (!client.ip ~ purge) { return (synth(403, "Not allowed.")); } # Logik für BAN mit Verwendung des X-Cache-Tags-Headers. 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.")); } # Synthetische Antwort, damit die Anfrage nicht ans Backend geht. return (synth(200, "Ban added.")); } }
Innerhalb von vcl_backend_response
:
sub vcl_backend_response { # Setze ban-lurker freundliche Custom-Header. set beresp.http.X-Url = bereq.url; set beresp.http.X-Host = bereq.http.host; ... }
Innerhalb von vcl_deliver
:
sub vcl_deliver { # Entferne ban-lurker freundliche Custom-Header vor Auslieferung an den Client. unset resp.http.X-Url; unset resp.http.X-Host; # Kommentarzeilen für einfacheres Debugging der Drupal Cache-Tags in der Entwicklung. unset resp.http.X-Cache-Tags; unset resp.http.X-Cache-Contexts; ... }
Starten Sie Varnish unbedingt neu, nachdem Sie die VCL entsprechend angepasst haben!
Cache-Tags-Header senden
Sie können eines der folgenden Module aktivieren, damit Drupal den HTTP-Header mit Cache-Tags ausgibt:
Projekt | Modul | 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 |
Beachten Sie, dass in einigen Versionen vor 8.x-3.0-beta5 das Purge-Modul den Header Purge-Cache-Tags automatisch setzte, dies jedoch entfernt wurde, da entschieden wurde, dass diese Verantwortung bei den Submodulen liegen sollte.
BAN-Anfrage beim Ändern von Inhalt oder Konfiguration senden
Mit dem Modul Generic HTTP Purger können Sie auf der Konfigurationsseite für Purge (admin/config/development/performance/purge) einen HTTP-Purger hinzufügen.
Geben Sie die Daten Ihres Varnish-Servers ein (Hostname, Port, Pfad usw.) und konfigurieren Sie unter „Header“ einen Header mit folgender Konfiguration:
- Header: X-Cache-Tags
- Wert: [invalidation:expression]
Sobald Sie diese Purge-Konfiguration speichern und einen Cron-Job einrichten, um die Purge-Warteschlange zu verarbeiten (drush p-queue-work), sollte Varnish Seiten sperren, sobald die Warteschlange Verbote auslöst!
Einige Hinweise in dieser Dokumentation wurden aus folgenden Quellen adaptiert:
Drupal’s online documentation is © 2000-2020 by the individual contributors and can be used in accordance with the Creative Commons License, Attribution-ShareAlike 2.0. PHP code is distributed under the GNU General Public License.