Varnish Cache für Magento 2: Einrichtung, Konfiguration und Fehlersuche

Varnish kann Magento 2-Seiten in Millisekunden laden, wenn es gut konfiguriert ist. Dieser Leitfaden behandelt die Einrichtung, das VCL, die SSL-Terminierung, die Trefferquote, das Löschen und häufige Fehler wie 503 Backend fetch failed.

Varnish ist der empfohlene Full-Page-Cache für Magento 2 in der Produktion. Ein gut konfiguriertes Varnish liefert zwischengespeicherte Kategorie- und Produktseiten in Millisekunden, ohne PHP oder die Datenbank zu berühren. Ein schlecht konfiguriertes Varnish führt zu einer niedrigen Trefferquote, veralteten Preisen oder dem berühmten „Error 503 Backend fetch failed“.

Dieser Leitfaden behandelt, wie man Varnish für Magento 2 einrichtet, die Cache-Trefferquote verbessert und die häufigsten Probleme behebt.

Wie Varnish in einen Magento-Stack passt

Ein typisches Setup:

Visitor → Nginx (SSL termination, port 443) → Varnish (port 6081 or 80) → Nginx/PHP-FPM backend (port 8080) → Magento

Varnish verarbeitet HTTPS nicht selbst, daher terminiert ein Webserver oder Lastenausgleich vor ihm SSL und leitet unverschlüsseltes HTTP an Varnish weiter.

Schritt 1: Installieren Sie eine unterstützte Varnish-Version

Überprüfen Sie die Systemanforderungen von Magento für Ihre Version, um zu sehen, welche Varnish-Versionen unterstützt werden, und installieren Sie es aus dem offiziellen Varnish-Repository für Ihr Betriebssystem.

Schritt 2: Konfigurieren Sie Magento, um Varnish zu verwenden

Im Admin-Bereich: Stores → Configuration → Advanced → System → Full Page Cache setzen Sie Caching Application auf Varnish Cache.

Oder über die Befehlszeile:

bin/magento config:set system/full_page_cache/caching_application 2

Teilen Sie Magento mit, wo Varnish sich befindet, damit es Löschanfragen senden kann:

bin/magento setup:config:set --http-cache-hosts=127.0.0.1:6081

Schritt 3: Generieren Sie die VCL

Magento generiert eine Varnish-Konfigurationsdatei (VCL) für Sie:

bin/magento varnish:vcl:generate --export-version=6 --backend-host=127.0.0.1 --backend-port=8080 --access-list=127.0.0.1 --output-file=/etc/varnish/default.vcl

Passen Sie die Exportversion an Ihre Varnish-Hauptversion an und den Backend-Host/Port an Ihren Backend-Webserver. Die access-list steuert, wer Löschanfragen senden darf.

Sie können das VCL auch im Admin-Bereich unter den Einstellungen für den Full Page Cache exportieren.

Schritt 4: Konfigurieren Sie den Backend-Webserver

Ihr Backend Nginx hört auf Port 8080 (oder einem anderen internen Port) und führt PHP-FPM mit der Standard-Magento-Nginx-Konfiguration aus. Varnish leitet die Anfragen dorthin weiter.

Schritt 5: SSL-Terminierung konfigurieren

Der Front-Nginx hört auf 443, verwaltet Zertifikate und leitet an Varnish weiter:

location / {
    proxy_pass http://127.0.0.1:6081;
    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 https;
    proxy_set_header X-Forwarded-Port 443;
    proxy_buffer_size 128k;
    proxy_buffers 4 256k;
    proxy_busy_buffers_size 256k;
}

Der X-Forwarded-Proto-Header teilt Magento mit, dass die ursprüngliche Anfrage HTTPS war. Größere Proxy-Puffer helfen bei Magentos großen Headern.

Schritt 6: Überprüfen Sie, ob das Caching funktioniert

curl -sI https://www.example.com/some-category.html | grep -i -E "x-magento-cache|age|x-cache"

Fordern Sie die Seite zweimal an. Bei der zweiten Anfrage sollten Sie einen Cache-Treffer sehen (abhängig von Ihren VCL-Headern, zum Beispiel einem wachsenden Age-Header oder einem Trefferindikator). Verwenden Sie varnishstat und varnishlog für Details:

varnishstat -1 | grep -E "cache_hit|cache_miss"
varnishlog -g request -q "ReqURL ~ '/some-category.html'"

Die Trefferquote verbessern

Eine niedrige Trefferquote ist das häufigste Varnish-Problem in Magento. Ursachen und Lösungen:

Marketing-Parameter teilen den Cache

Jeder ?utm_source=... oder ?gclid=... erstellt ein separates Cache-Objekt. Entfernen Sie diese Parameter in vcl_recv, damit sie den Cache-Schlüssel nicht erreichen (sie sind weiterhin in Ihrem Analytics im Browser verfügbar). Das generierte Magento VCL entfernt bereits einige; erweitern Sie die Liste mit denjenigen, die Ihre Kampagnen verwenden (zum Beispiel fbclid, msclkid, gad_source).

Nicht zwischenspeicherbare Blöcke

Ein einzelner Block mit cacheable="false" im Layout-XML macht die gesamte Seite uncachebar. Suchen Sie danach:

grep -r 'cacheable="false"' app/ vendor/ --include=*.xml

Verschieben Sie personalisierte Inhalte stattdessen in private Inhalte (Kundenbereiche).

Cookies und Header

Benutzerdefinierte Cookies oder Header, die je nach Benutzer variieren, können das Caching verhindern. Überprüfen Sie, was Ihre Erweiterungen hinzufügen.

Zu kurze TTL oder zu viele Löschvorgänge

Große Importe oder Erweiterungen, die den gesamten Cache nach jedem Produkt-Speichern leeren, halten den Cache kalt. Leeren Sie nach Tags anstatt den gesamten Cache und führen Sie Importe nachts durch.

Cache-Warmup

Nach einem Deployment oder einem vollständigen Flush erreichen die ersten Besucher nicht zwischengespeicherte Seiten. Ein Cache-Wärmer, der Ihre wichtigsten URLs crawlt, hilft dabei.

Häufige Fehler

Fehler 503 Backend-Abruf fehlgeschlagen

Varnish konnte keine gültige Antwort vom Backend erhalten. Häufige Ursachen:

  • Backend ist nicht erreichbar oder der Port ist falsch
  • PHP schwerwiegender Fehler (prüfen Sie var/log und die PHP-FPM-Protokolle)
  • Header zu groß: Magento sendet große X-Magento-Tags Header auf Seiten mit vielen Produkten. Erhöhen Sie http_resp_hdr_len und http_resp_size in den Startparametern von Varnish.
  • Backend-Timeout: Erhöhen Sie first_byte_timeout für langsame Seiten (und beheben Sie die Langsamkeit)

Gesundheitsprüfung fehlgeschlagen

Der generierte VCL verwendet eine Gesundheitsprüfung auf /pub/health_check.php (oder /health_check.php, abhängig von Ihrem Dokumentenstamm). Stellen Sie sicher, dass diese URL im Backend funktioniert.

Preise oder Bestände werden nicht aktualisiert

Purge-Anfragen erreichen Varnish nicht. Überprüfen Sie --http-cache-hosts, die Zugriffsliste in der VCL und die Firewall-Regeln.

Admin oder Checkout-Cache

Die Standard-VCL schließt Admin-, Checkout- und Kunden-Seiten aus. Wenn Sie die VCL angepasst haben, stellen Sie sicher, dass diese Ausschlüsse weiterhin vorhanden sind.

Varnish vs integrierter Cache vs CDN

Option Wann man verwenden sollte
Eingebauter Magento-Cache Entwicklung oder sehr kleine Geschäfte
Varnish Für die Produktion empfohlen
CDN mit vollständigem Seiten-Cache Zusätzliche Schicht für globalen Verkehr; muss die Cache-Logik von Magento respektieren

Häufig gestellte Fragen

Ist Varnish für Magento 2 erforderlich?

Nicht technisch, aber es wird dringend für die Produktionsleistung empfohlen.

Funktioniert Varnish mit Hyvä?

Ja. Hyvä ändert das Frontend; das vollständige Seiten-Caching funktioniert auf die gleiche Weise.

Welche Trefferquote sollte ich anstreben?

Es hängt von den Verkehrsströmen ab, aber auf Katalogseiten sollten die meisten anonymen Anfragen Treffer sein. Wenn die meisten Anfragen Fehlschläge sind, schauen Sie sich die Parameter, nicht zwischenspeicherbare Blöcke und Bereinigungen an.

Möchten Sie Varnish richtig optimieren?

Ich konfiguriere Varnish und Full-Page-Caching für Magento 2 und behebe Trefferquote- und 503-Probleme. Siehe auch 12 Gründe, warum ein Magento-Shop langsam ist, meinen Magento 2 und Hyvä-Service oder fordere eine Leistungsprüfung an.