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/logund die PHP-FPM-Protokolle) - Header zu groß: Magento sendet große
X-Magento-TagsHeader auf Seiten mit vielen Produkten. Erhöhen Siehttp_resp_hdr_lenundhttp_resp_sizein den Startparametern von Varnish. - Backend-Timeout: Erhöhen Sie
first_byte_timeoutfü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.