Alle Security Headers für Nginx konfigurieren
Vollständige Konfiguration: 11 Security Headers in einer zentralen Include-Datei. Kopieren, anpassen, reload — fertig.
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
# 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; 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";
}
} 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.
# 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 Ö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.