Varnish-Cache auf LWS erzwingen

Procédure

In dieser Dokumentation erklären wir Ihnen Schritt für Schritt, wie Sie Varnish und die Browser dazu zwingen, Ihre Ressourcen im Cache zu behalten, selbst wenn diese Anfragen Pragma: no-cache oder Cache-Control: no-cache senden.

1. Kontext und LWS-Architektur

Die von LWS verwalteten Shared-Hosting- und cPanel/VPS-Pakete basieren auf dem Stack:

Browser ⇄ NGINX (SSL + HTTP/2) ⇄ Varnish Cache ⇄ Apache/PHP-FPM

  • NGINX verwaltet TLS und komprimiert die Inhalte.
  • Varnish (Fastest Cache) ist als Reverse-Proxy positioniert, um HTTP-Antworten im Speicher zwischenzuspeichern.
  • Apache oder PHP-FPM erzeugen die endgültige Antwort, wenn Varnish keinen HIT hat.

Wenn alles korrekt konfiguriert ist, kann Varnish bis zu 1000-mal schneller liefern als ein direkter Zugriff auf PHP und gleichzeitig die CPU des Servers entlasten.

2. Erinnerung: Wie entscheidet Varnish, was gecacht wird?

Element Auswirkung auf den Cache Wie man es beeinflusst
Methode Nur GET und HEAD sind zulässig POST für öffentliche Seiten vermeiden
Antwort-Header Cache-Control, Expires, Pragma Bestimmen Dauer und Umfang Über .htaccess setzen (siehe §3)
Cookies / Set-Cookie Ein vorhandenes Cookie = standardmäßig kein Caching Unnötige Cookies entfernen oder neutralisieren
HTTP-Status 200, 203, 301, 302, 404, 410 sind cachefähig Keine Aktion, aber 500er vermeiden!

Trucs et astuces


Varnish ignoriert standardmäßig das vom Browser gesendete Cache-Control: no-cache für statische Dateien, respektiert aber die "revalidation logic", wenn das Objekt bereits im Cache ist.

3. Lebensdauer über .htaccess steuern

Aktivieren Sie das Modul mod_headers (das ist bei LWS standardmäßig der Fall) und fügen Sie dann den folgenden Snippet ein, wo Sie möchten:

⌨ Befehl

  Header set Cache-Control "public, max-age=3600, s-maxage=3600, stale-while-revalidate=60, stale-if-error=86400"
  Header set Expires "Thu, 31 Dec 2037 23:55:55 GMT"
  • max-age : Dauer (in Sekunden) im Browser.
  • s-maxage : spezifische Dauer für Shared Caches (Varnish/CDN).
  • stale-while-revalidate : erlaubt Varnish, während der Hintergrundaktualisierung veraltete Inhalte auszuliefern.
  • stale-if-error : liefert die veraltete Version aus, wenn das Backend mit einem Fehler antwortet (fail-safe).

3.1. Zielgerichtet nach Verzeichnis

Wenn Sie dieselbe .htaccess-Datei im Verzeichnis "/images/" ablegen, gilt die Regel nur für das Verzeichnis "images".

3.2. Zielgerichtet nach Erweiterung

⌨ Befehl

  
    Header set Cache-Control "public, max-age=2592000, s-maxage=2592000, immutable"
  

immutable : weist den Browser an, dass keine Revalidierung notwendig ist, solange das Objekt nicht abgelaufen ist; ideal für versionierte Dateien (style.483bf.css).

3.3. Kurzer Cache für HTML

⌨ Befehl

  Header set Cache-Control "public, max-age=300, s-maxage=600, must-revalidate"

Läuft clientseitig nach 5 Min. und bei Varnish nach 10 Min. ab, danach ist eine Revalidierung obligatorisch.

4. Konkrete Nutzungsszenarien

Praxisfall .htaccess-Ausschnitt Warum?
Landingpage wird stündlich aktualisiert max-age=600, s-maxage=1200 Besucher erhalten nahezu aktuelle Daten, ohne PHP zu überlasten
Versionierte CSS/JS-Dateien max-age=31536000, immutable Nahezu kein Traffic auf dem Server, sofortiges Laden
Produktbilder im E-Commerce max-age=604800 Reduziert die TTFB, beschleunigt den Katalog
Backoffice / wp-admin no-store, private Verhindert, dass sensible Daten im Shared Cache landen

5. Cache leeren oder invalidieren

Von Ihrem Hosting aus (PHP-Skript Ihrer Website, Cron-Job oder SSH-Terminal) benötigt das Leeren des Varnish-Caches kein Token:

  • Eine Seite:
⌨ Befehl
curl -X PURGE https://beispiel.com/pfad/ressource.jpg
  • Ein ganzes Verzeichnis per regulärem Ausdruck:
⌨ Befehl
curl -X PURGE -H 'X-Purge-Method: regex' 'https://beispiel.com/images/.*'
  • Die gesamte Website:
⌨ Befehl
curl -X FULLPURGE https://beispiel.com
  • In PHP, zum Beispiel nach der Aktualisierung eines Inhalts:
Code
$ch = curl_init('https://beispiel.com/pfad/seite.html');
curl_setopt_array($ch, [CURLOPT_CUSTOMREQUEST => 'PURGE', CURLOPT_RETURNTRANSFER => true, CURLOPT_TIMEOUT => 20]);
curl_exec($ch);
$code = curl_getinfo($ch, CURLINFO_HTTP_CODE); // 200 : cache purge ; 405 : purge verweigert
curl_close($ch);

Ein vollständiges Skript, bereit für einen Cron-Job, wird in der Hilfe Die Geschwindigkeit Ihrer Website mit Fastest Cache erhöhen angeboten. Sie können den Cache auch über Ihr Panel mit der Schaltfläche „Cache leeren“ von Fastest Cache leeren.

6. Testen und debuggen

⌨ Befehl
curl -I https://beispiel.com/style.css

Achten Sie auf:

  • Age: 356 → Varnish hat eine Antwort ausgeliefert, die 356 s alt ist.
  • Cache-Control: public, max-age=2592000, s-maxage=2592000, immutable
  • X-Cache: HIT (oder MISS).

Mit Chrome/Edge: DevTools > Network > Disable cache kann einen Erstbesucher simulieren.

7. Häufige Fallstricke

  1. Unnötige Cookies : Viele WordPress-Themes setzen ein Cookie selbst für öffentliche Seiten. Entfernen oder deaktivieren Sie diese über functions.php.
  2. Query-Strings : Standardmäßig erzeugt ?v=123 einen neuen Eintrag im Cache. Versionieren Sie stattdessen im Dateinamen.
  3. Sensible Inhalte : Formulare, Seiten des Kundenbereichs ➡ no-store, private, max-age=0.
  4. Brotli/Gzip-Kompression : Aktivieren Sie diese vor der Varnish-Schicht, um ein doppeltes Caching zu vermeiden.

8. Zusammenfassende Best Practices

  • Verwenden Sie s-maxage ⩾ max-age, um einen Proxy-Cache länger zu behalten als den Browser-Cache.
  • Setzen Sie immutable auf jede Datei, deren Name einen Hash enthält.
  • Mischen Sie das veraltete Expires nicht mit max-age, außer für ältere Browser.
  • Dokumentieren Sie Ihre TTLs in einer CACHE_POLICY.md-Datei für das Team.

9. Nützliche Ressourcen

✅ Ihr Varnish-Cache ist jetzt unter Kontrolle!

help.lws.net/a/1949
War dieser Artikel hilfreich?

Ja

Nicht

7 648 Mal gelesen

Vielen Dank! Stellen Sie gerne Fragen zu unserer Dokumentation, wenn Sie weitere Informationen wünschen, und helfen Sie uns, sie zu verbessern.

Ähnliche Artikel

Eine Frage zu diesem Artikel?

Stellen Sie sie dem LWS-Team und der Community. Die Antwort wird nach Moderation veröffentlicht.

Stellen Sie eine Frage an das LWS-Team und seine Gemeinschaft

DSGVO: Verantwortlicher: LWS-Ligne Web Services. Zweck: Moderation und öffentliche Veröffentlichung Ihrer Frage, gegebenenfalls Benachrichtigung über eine Antwort. Rechtsgrundlage: Einwilligung (Art. 6 Abs. 1 lit. a DSGVO). Speicherdauer der E-Mail-Adressen: 90 Tage nach der Benachrichtigung, höchstens 12 Monate ohne Antwort. Zur Ausübung Ihrer Rechte siehe den DSGVO-Abschnitt unserer AGB.