Varnish als HTTP-Cache im Container
Varnish legt einen Full-Page-Cache vor deine Website: Wiederkehrende Seiten kommen aus dem RAM, ohne dass PHP oder die Datenbank angefasst werden. Auf Plesk fügt sich das elegant in die bestehende Kette ein — nginx → Varnish → Apache —, weil nginx ohnehin als Reverse Proxy vorgeschaltet ist. Besonders Magento ist dafür gebaut: Es liefert seine Varnish-Konfiguration gleich mit.
Voraussetzungen
Abschnitt betitelt „Voraussetzungen“- Rootless Docker — siehe Grundlagen — und das Verständnis der Reverse-Proxy-Anbindung, denn Varnish ist genau so ein Proxy-Ziel.
- Eine Anwendung, die Cache-fähig ist. Faustregel: anonyme Besucher ja, personalisierte Bereiche (Warenkorb, Login) müssen am Cache vorbei — das regelt die VCL.
Die Kette im Überblick
Abschnitt betitelt „Die Kette im Überblick“- nginx (Port 443, TLS) nimmt die Anfrage an und reicht sie statt an Apache an Varnish weiter (
127.0.0.1:6081). - Varnish antwortet aus dem Cache — oder holt die Seite bei Apache (Plesk-intern Port
7080) und merkt sie sich. - Die Anwendung steuert per VCL und Headern, was wie lange gecacht wird.
Schritt für Schritt
Abschnitt betitelt „Schritt für Schritt“- Leg das Projekt an und erstelle eine minimale
default.vclin~/docker/varnish/:Für Magento: stattdessen die vom Shop generierte VCL nutzen —vcl 4.1;backend default {.host = "127.0.0.1";.port = "7080";}bin/magento varnish:vcl:generate(Backend-Host/-Port wie oben eintragen). - Starte Varnish im Host-Netzwerk, damit er Apache lokal erreicht:
Terminal-Fenster docker run -d --name varnish --restart unless-stopped \--network host \-e VARNISH_HTTP_PORT=6081 -e VARNISH_SIZE=256M \-v ~/docker/varnish/default.vcl:/etc/varnish/default.vcl:ro \varnish:7 - Teste Varnish direkt:
curl -I http://127.0.0.1:6081 -H "Host: deinedomain.de"— die Antwort muss von deiner Seite kommen. - Lass die Domain umverkabeln: Ticket mit „nginx bitte auf
127.0.0.1:6081statt Apache zeigen” — wir hinterlegen das Proxy-Snippet aus dem Reverse-Proxy-Artikel mit diesem Ziel. - Prüfe den Cache-Effekt: Zweimal dieselbe Seite abrufen — im Antwort-Header zeigt
Age:größer0, dass die zweite Antwort aus dem Cache kam.
Wenn etwas schiefläuft
Abschnitt betitelt „Wenn etwas schiefläuft“Age: 0 bei jedem Aufruf — es cached nichts
Abschnitt betitelt „Age: 0 bei jedem Aufruf — es cached nichts“Die Anwendung sendet Cookies oder Cache-Control: no-cache auf jeder Seite; die Standard-VCL geht dann auf Nummer sicher und cached nicht.
Lösung: Bei Magento die generierte VCL verwenden (sie kennt die Shop-Cookies). Bei anderen Anwendungen prüfen, ob Session-Cookies wirklich auf jeder Seite nötig sind.
Kunden sehen fremde oder veraltete Inhalte
Abschnitt betitelt „Kunden sehen fremde oder veraltete Inhalte“Der Ernstfall des Full-Page-Caches: Es wurde etwas gecacht, das personalisiert war — oder Purges kommen nicht an.
Lösung: Sofort die Domain zurück auf Apache verkabeln lassen (Ticket), dann die VCL prüfen: personalisierte Routen müssen pass sein, und die Anwendung muss Purges an 127.0.0.1:6081 senden dürfen.
Varnish startet nicht (Address already in use)
Abschnitt betitelt „Varnish startet nicht (Address already in use)“Port 6081 ist belegt — etwa durch einen zweiten Varnish-Versuch.
Lösung: docker ps -a prüfen und Altlasten entfernen, oder einen anderen Port in VARNISH_HTTP_PORT setzen (und im Ticket angeben).
Verwandte Artikel
Abschnitt betitelt „Verwandte Artikel“- Container hinter deiner Domain — die Verkabelungs-Grundlage dieser Kette.
- Magento-Cache leeren und neu indexieren — die Magento-Cache-Ebenen darunter.
- Rootless Docker: Grundlagen — Container-Handwerkszeug.
Du kommst nicht weiter?
Abschnitt betitelt „Du kommst nicht weiter?“Varnish ist das anspruchsvollste Beispiel der Serie — bei Zweifeln lieber vorher fragen als hinterher Cache-Chaos aufräumen. Ticket im Kundencenter öffnen — wir planen die Kette gemeinsam.