Clear-Site-Data für Nginx
Clear-Site-Data auf dem Nginx-Logout-Endpoint einrichten — mit location-Block, escaped Anführungszeichen und proxy_pass-Variante zum Kopieren.
Clear-Site-Data auf Nginx
Nginx unterstützt Clear-Site-Data nativ über die add_header-Direktive — kein zusätzliches Modul nötig. Der Header wird in einem dedizierten location-Block für den Logout-Endpoint gesetzt, nicht global. Die einzige Besonderheit: Die Anführungszeichen im Header-Wert müssen korrekt escaped werden.
Clear-Site-Data bringt 3 von 166 Punkten im Wolf-Agents Web Security Check. Die Implementierung dauert unter 10 Minuten und erfordert nur wenige Zeilen in der Nginx-Konfiguration.
Location-Block für Logout erstellen
Erstellen Sie einen dedizierten location-Block für Ihren Logout-Endpoint. Der add_header mit always stellt sicher, dass der Browser die Daten auch bei Fehler-Responses löscht.
# Clear-Site-Data — nur auf dem Logout-Endpoint!
server {
# Logout-Route (statischer Redirect)
location /logout {
add_header Clear-Site-Data '"cache", "cookies", "storage"' always;
add_header Cache-Control "no-store" always;
return 302 /;
}
# Alternative: Proxy zum Backend
location /api/logout {
proxy_pass http://backend;
add_header Clear-Site-Data '"cache", "cookies", "storage"' always;
}
} Der Header-Wert "cache", "cookies", "storage" enthält Anführungszeichen, die Teil des HTTP-Wertes sind (RFC-Pflicht). In Nginx wird der gesamte Wert in einfache Quotes eingeschlossen: '"cache", "cookies", "storage"'.
Cache-Control als Backup
Ergänzen Sie Cache-Control: no-store, um zu verhindern, dass die Logout-Response selbst im Browser-Cache oder einem Proxy-Cache gespeichert wird. Ohne diesen Header könnte ein Reverse Proxy die Logout-Response cachen und bei nachfolgenden Requests aus dem Cache ausliefern — ohne den Clear-Site-Data Header.
Konfiguration testen und laden
Prüfen Sie die Nginx-Konfiguration auf Syntaxfehler und laden Sie sie neu. Testen Sie anschließend mit curl oder den Browser DevTools, ob der Header korrekt gesetzt wird.
sudo nginx -t && sudo systemctl reload nginx curl -I https://ihre-domain.de/logout | grep -i clear Clear-Site-Data: "cache", "cookies", "storage" muss in der Response erscheinen. Wie steht Ihre Domain bei Clear-Site-Data?
Prüfen Sie es jetzt — kostenlos, ohne Registrierung, mit 166 Prüfpunkte.
Häufig gestellte Fragen
Warum müssen die Anführungszeichen im Nginx-Clear-Site-Data Header escaped werden?
Die Werte von Clear-Site-Data müssen in Anführungszeichen stehen (z.B. "cache"), was Teil des Header-Wertes ist. In der Nginx-Konfiguration wird der gesamte Header-Wert bereits in einfache Anführungszeichen eingeschlossen. Die inneren Anführungszeichen sind daher keine Nginx-Syntax, sondern Teil des HTTP-Header-Wertes und müssen so stehen bleiben.
Soll Clear-Site-Data im globalen server-Block oder in einem location-Block stehen?
Ausschließlich im location-Block für den Logout-Endpoint. Im globalen server-Block würde der Header auf jeder Response gesetzt — das zerstört die Session bei jedem Seitenaufruf. Beschränken Sie Clear-Site-Data auf location /logout oder location /api/logout.
Brauche ich das always-Keyword beim add_header für Clear-Site-Data?
Ja. Ohne always setzt Nginx den Header nur bei erfolgreichen Responses (2xx/3xx). Da Logout-Endpoints gelegentlich Fehler-Statuscodes zurückgeben, stellt always sicher, dass der Browser die Daten auch bei 4xx/5xx-Responses löscht.
Funktioniert Clear-Site-Data mit proxy_pass zu einem Backend?
Ja. Setzen Sie add_header Clear-Site-Data im gleichen location-Block wie den proxy_pass. Nginx fügt den Header zur Upstream-Response hinzu. Beachten Sie: Wenn das Backend den Header bereits setzt, kann es zu doppelten Headern kommen — prüfen Sie dies mit curl -I.
Wie teste ich, ob Clear-Site-Data auf meinem Nginx-Logout-Endpoint funktioniert?
Testen Sie mit curl -I https://ihre-domain.de/logout und prüfen Sie die Response-Header. Alternativ: Browser DevTools öffnen, Network-Tab, Logout durchführen und die Response-Header der Logout-Request inspizieren. Der Header Clear-Site-Data: "cache", "cookies", "storage" muss in der Response erscheinen.