Cookie-Sicherheit für Nginx konfigurieren

Schritt-für-Schritt-Anleitung: Secure, HttpOnly und SameSite auf Nginx einrichten — mit proxy_cookie_flags, Cookie-Prefixes und fertigen Konfigurationen zum Kopieren.

Nginx · Schritt für Schritt

Sichere Cookies auf Nginx

Nginx ist der weltweit meistgenutzte Webserver und Reverse Proxy. Die Direktive proxy_cookie_flags (ab Version 1.19.3) macht die Cookie-Absicherung besonders einfach: Eine Zeile in der Konfiguration sichert alle Upstream-Cookies mit Secure, HttpOnly und SameSite ab — ohne Änderungen am Backend-Code.

Diese Anleitung zeigt die Konfiguration in vier Schritten: vom Setzen der Flags über SameSite-Feintuning bis zur Verifizierung. Alle Beispiele sind für Nginx als Reverse Proxy optimiert — die häufigste Produktions-Architektur. Cookie-Sicherheit ist mit 15 von 166 Punkten ein wichtiger Faktor im Wolf-Agents Web Security Check.

1 Schritt 1 von 4

Cookie-Flags mit proxy_cookie_flags setzen

Die Direktive proxy_cookie_flags ist seit Nginx 1.19.3 verfügbar und der empfohlene Weg, Cookie-Attribute für Upstream-Cookies zu setzen. Das Tilde-Zeichen (~) matcht alle Cookies, die der Upstream-Server setzt.

/etc/nginx/conf.d/cookies.conf proxy_cookie_flags
# nginx.conf — Cookie-Flags für Upstream-Cookies (ab 1.19.3)
server {
    listen 443 ssl;
    server_name ihre-domain.de;

    location / {
        proxy_pass http://backend;

        # Alle Cookies des Upstreams absichern
        proxy_cookie_flags ~ secure httponly samesite=strict;
    }
}
Ältere Nginx-Versionen?

Ohne proxy_cookie_flags können Sie proxy_hide_header + add_header als Workaround nutzen. Besser ist es, die Cookie-Flags direkt in der Backend-Anwendung zu setzen.

Fallback für ältere Versionen Legacy
# Für Nginx-Versionen VOR 1.19.3
# Header-basierte Cookie-Modifikation (Workaround)
location / {
    proxy_pass http://backend;

    # Upstream-Set-Cookie-Header verstecken und modifiziert neu setzen
    proxy_hide_header Set-Cookie;
    add_header Set-Cookie $upstream_http_set_cookie always;
}

# Empfehlung: Cookies besser direkt in der Anwendung konfigurieren
Konfiguration prüfen und neu laden:
sudo nginx -t && sudo systemctl reload nginx
2 Schritt 2 von 4

SameSite-Attribut konfigurieren

Das SameSite-Attribut steuert, ob Cookies bei Cross-Site-Anfragen mitgesendet werden. Strict blockiert alle Cross-Site-Requests (Maximum-Schutz gegen CSRF), Lax erlaubt Top-Level-GET-Navigation (bessere UX bei externen Links). Mit proxy_cookie_flags können Sie verschiedene Cookies unterschiedlich konfigurieren.

/etc/nginx/conf.d/cookies.conf SameSite
# SameSite=Strict für hochsensitive Anwendungen
proxy_cookie_flags ~ secure httponly samesite=strict;

# SameSite=Lax für Standard-Websites (empfohlen)
proxy_cookie_flags ~ secure httponly samesite=lax;

# Gezieltes Matching: Nur bestimmte Cookies absichern
proxy_cookie_flags session secure httponly samesite=strict;
proxy_cookie_flags analytics secure samesite=lax;
Wert Cross-Site-Verhalten Empfehlung
Strict Cookie wird nie bei Cross-Site-Requests gesendet Banking, Admin-Panels, sensitive APIs
Lax Cookie wird bei Top-Level-GET-Navigation gesendet Standard für die meisten Websites
None Cookie wird immer gesendet (benötigt Secure) Nur für Cross-Site-Embeds / iFrames
Bei E-Commerce-Shops mit Payment-Providern (Stripe, PayPal): Verwenden Sie SameSite=Lax, da Redirect-Returns von Payment-Seiten sonst die Session verlieren.
3 Schritt 3 von 4

Cookie-Prefixes und Absicherung

Cookie-Prefixes sind ein zusätzlicher Defense-in-Depth-Mechanismus: Der Browser erzwingt Attribute allein aufgrund des Cookie-Namens. __Host- ist die strengste Option — sie verbietet das Domain-Attribut und erzwingt Secure und Path=/. Das verhindert Subdomain-Angriffe.

/etc/nginx/conf.d/cookies.conf Prefixes
# Backend muss Cookies mit __Host- oder __Secure- Prefix setzen
# Nginx leitet diese unverändert weiter

# Beispiel: Backend setzt
#   Set-Cookie: __Host-session=abc123; Secure; Path=/; HttpOnly; SameSite=Strict

# Nginx fügt via proxy_cookie_flags keine doppelten Flags hinzu,
# wenn sie bereits vorhanden sind (ab 1.19.8)
location / {
    proxy_pass http://backend;
    proxy_cookie_flags ~ secure httponly samesite=strict;
}
Cookie-Prefixes müssen im Backend gesetzt werden (im Cookie-Namen selbst). Nginx leitet sie unverändert weiter. Stellen Sie sicher, dass Ihre Anwendung den Prefix beim Setzen und beim Lesen des Cookies verwendet.
4 Schritt 4 von 4

Konfiguration verifizieren

Nach dem Reload prüfen Sie, ob die Cookie-Flags korrekt gesetzt werden. Nutzen Sie curl für einen schnellen Check und die Browser DevTools (Application → Cookies) für eine visuelle Prüfung aller Cookie-Attribute.

Terminal Verifizierung
# 1. Nginx-Konfiguration prüfen
sudo nginx -t

# 2. Konfiguration neu laden (ohne Downtime)
sudo systemctl reload nginx

# 3. Cookie-Flags per curl verifizieren
curl -sI https://ihre-domain.de/login | grep -i set-cookie

# Erwartete Ausgabe:
# Set-Cookie: session=...; Secure; HttpOnly; SameSite=Strict
Browser DevTools als Alternative

Öffnen Sie DevTools (F12) → Application → Cookies → Ihre Domain. Prüfen Sie die Spalten HttpOnly, Secure und SameSite für jeden Cookie. Session-Cookies müssen bei allen drei Spalten ein Häkchen zeigen.

Wie steht Ihre Domain bei Cookie-Sicherheit?

Prüfen Sie es jetzt — kostenlos, ohne Registrierung, mit 166 Prüfpunkte.

Häufig gestellte Fragen

Wie setze ich Cookie-Flags in Nginx?

Ab Nginx 1.19.3 nutzen Sie die Direktive proxy_cookie_flags: proxy_cookie_flags ~ secure httponly samesite=strict; in Ihrem location-Block. Diese Methode setzt die Flags automatisch für alle Cookies, die vom Upstream-Server kommen.

Was ist proxy_cookie_flags und seit welcher Nginx-Version ist es verfügbar?

proxy_cookie_flags ist eine Nginx-Direktive, die seit Version 1.19.3 verfügbar ist. Sie ermöglicht das automatische Setzen von Cookie-Attributen (Secure, HttpOnly, SameSite) für Cookies, die von einem Upstream-Server (proxy_pass) stammen. Das Tilde-Zeichen (~) als Pattern matcht alle Cookies.

Brauche ich einen Nginx-Reload nach Cookie-Änderungen?

Ja. Nach jeder Änderung an der Nginx-Konfiguration müssen Sie die Syntax prüfen (nginx -t) und dann neu laden (systemctl reload nginx). Ein Reload unterbricht keine bestehenden Verbindungen — anders als ein Restart.

Was mache ich bei älteren Nginx-Versionen ohne proxy_cookie_flags?

Bei Nginx-Versionen vor 1.19.3 können Sie proxy_hide_header und add_header nutzen, um Set-Cookie-Header zu modifizieren. Alternativ konfigurieren Sie die Cookie-Flags direkt in Ihrer Backend-Anwendung (z.B. PHP, Node.js, Python).

Kann Nginx Cookies setzen, die nicht vom Upstream kommen?

Nginx selbst setzt keine Cookies — das ist Aufgabe der Anwendung. proxy_cookie_flags modifiziert nur Cookies, die der Upstream bereits setzt. Für eigene Cookies verwenden Sie Ihre Programmiersprache oder ein Nginx-Lua-Modul (OpenResty).

Welchen Einfluss haben Cookie-Flags auf die Nginx-Performance?

Keinen messbaren. proxy_cookie_flags ist ein einfacher String-Match auf Set-Cookie-Header und fügt wenige Bytes hinzu. Der Overhead ist vernachlässigbar, selbst bei tausenden Requests pro Sekunde.