Alle Security Headers für Nginx konfigurieren

Vollständige Konfiguration: 11 Security Headers in einer zentralen Include-Datei. Kopieren, anpassen, reload — fertig.

Nginx · Vollständige Konfiguration

Security Headers als Include-Datei für Nginx

Nginx setzt Security Headers über die add_header-Direktive. Die zentrale Herausforderung ist die Vererbungsfalle: Sobald ein location-Block ein eigenes add_header enthält, gehen alle add_header-Direktiven des übergeordneten server-Blocks verloren.

Die Lösung ist eine zentrale Include-Datei (/etc/nginx/snippets/security-headers.conf), die in jedem server- und location-Block eingebunden wird. Die folgende Konfiguration enthält alle 11 Security Headers aus den Kapiteln 01-16 des Web Security Guides. Verwenden Sie immer das always-Keyword, damit Header auch bei Fehlerseiten (404, 500) gesetzt werden. Nach der Implementierung: Scannen Sie Ihre Domain mit dem Wolf-Agents Web Security Check — 166 Prüfpunkte zeigen sofort, ob alle Header korrekt gesetzt sind.

Vollständige Konfiguration

Erstellen Sie /etc/nginx/snippets/security-headers.conf und binden Sie die Datei per include ein. Stellen mit ANPASSEN: müssen Sie an Ihre Domain anpassen.

/etc/nginx/snippets/security-headers.conf 11 Header
# /etc/nginx/snippets/security-headers.conf
# Alle Security-Header zentral — include in server und location Blöcken
# Generiert aus Wolf-Agents Web Security Guide, Kapitel 00-16

# --- Kap 01: Content Security Policy ---
# ANPASSEN: Ersetzen Sie die Domains durch Ihre eigenen
add_header Content-Security-Policy "default-src 'self'; script-src 'self'; style-src 'self' 'unsafe-inline'; img-src 'self' data: https:; font-src 'self'; connect-src 'self'; object-src 'none'; worker-src 'self'; frame-ancestors 'self'; base-uri 'self'; form-action 'self'; upgrade-insecure-requests; report-uri /csp-report; report-to csp-endpoint" always;

# --- Kap 02: HTTP Strict Transport Security ---
# ANPASSEN: includeSubDomains nur wenn ALLE Subdomains HTTPS haben
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;

# --- Kap 04: Permissions Policy ---
add_header Permissions-Policy "camera=(), microphone=(), geolocation=(), payment=(), usb=(), bluetooth=(), idle-detection=(), serial=(), browsing-topics=(), unload=()" always;

# --- Kap 05: Clickjacking-Schutz ---
add_header X-Frame-Options "SAMEORIGIN" always;

# --- Kap 06: Referrer Policy ---
add_header Referrer-Policy "strict-origin-when-cross-origin" always;

# --- Kap 07: MIME-Sniffing-Schutz ---
add_header X-Content-Type-Options "nosniff" always;

# --- Kap 08: Cross-Origin Isolation ---
# ANPASSEN: cross-origin-embedder-policy kann Drittanbieter-Ressourcen blockieren
add_header Cross-Origin-Resource-Policy "same-origin" always;
add_header Cross-Origin-Opener-Policy "same-origin" always;
# credentialless ist kompatibler als require-corp (blockiert weniger)
add_header Cross-Origin-Embedder-Policy "credentialless" always;

# --- Kap 14: Reporting Endpoints ---
# ANPASSEN: Ersetzen Sie die URL durch Ihren Reporting-Endpoint
add_header Reporting-Endpoints 'csp-endpoint="https://ihre-domain.de/csp-report"' always;

# --- Kap 16: Origin Agent Cluster ---
add_header Origin-Agent-Cluster "?1" always;
nginx.conf — Einbindung Include-Pattern
server {
    include snippets/security-headers.conf;

    location / {
        # Header werden aus server{} geerbt
    }

    location /api {
        include snippets/security-headers.conf;  # Wichtig! Sonst gehen Header verloren
        add_header X-Custom-Header "value";
    }
}
Jeder location-Block mit eigenem add_header braucht ein eigenes include snippets/security-headers.conf;. Andernfalls gehen alle Security Header in diesem Block verloren.

Was jeder Header macht

Header Schutz Kapitel
Content-Security-Policy XSS-Angriffe verhindern — definiert erlaubte Ressourcen Kap. 01
Strict-Transport-Security HTTPS erzwingen — Downgrade-Angriffe verhindern Kap. 02
Permissions-Policy Browser-APIs deaktivieren — Kamera, Mikrofon, etc. Kap. 04
X-Frame-Options Clickjacking verhindern — Einbettung kontrollieren Kap. 05
Referrer-Policy URL-Leaks kontrollieren — Referrer-Informationen begrenzen Kap. 06
X-Content-Type-Options MIME-Sniffing verhindern — Dateitypen erzwingen Kap. 07
CORP / COOP / COEP Cross-Origin-Isolation — Spectre-Angriffe verhindern Kap. 08
Reporting-Endpoints Violation-Reports an Ihren Endpoint senden Kap. 14
Origin-Agent-Cluster Prozess-Isolation im Browser aktivieren Kap. 16

Verifikation

Prüfen Sie nach dem Reload, ob alle Header korrekt gesetzt sind.

Terminal Prüfung
# 1. Syntax prüfen und Konfiguration neu laden
sudo nginx -t && sudo systemctl reload nginx

# 2. Alle Security Headers prüfen
curl -I https://ihre-domain.de 2>/dev/null | grep -iE \
  "content-security|strict-transport|x-frame|x-content-type|referrer-policy|permissions-policy|cross-origin|origin-agent|reporting-endpoints"

# 3. Auf Duplikate prüfen
curl -I https://ihre-domain.de 2>/dev/null | sort | uniq -di
Browser DevTools

Öffnen Sie Chrome/Firefox DevTools (F12) → Network-Tab → Laden Sie die Seite neu → Klicken Sie auf den ersten Request → Prüfen Sie die Response Headers. Alle 11 Header sollten sichtbar sein.

Wie steht Ihre Domain bei Security-Header-Architektur?

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