Reporting API für Nginx konfigurieren

Report-To, NEL und Reporting-Endpoints auf Nginx einrichten — mit korrektem JSON-Escaping, proxy_pass für den Report-Endpoint und fertiger Konfiguration zum Kopieren.

Nginx · Schritt für Schritt

Reporting API auf Nginx

Nginx setzt Report-To, NEL und Reporting-Endpoints nativ über die add_header-Direktive. Die Hauptherausforderung liegt im korrekten JSON-Escaping: Report-To und NEL erwarten JSON-Objekte als Header-Werte, die in Nginx-Konfigurationsdateien korrekt in einfache Anführungszeichen eingeschlossen werden müssen. Für den Report-Endpoint selbst benötigen Sie ein Backend — Nginx kann Reports über proxy_pass weiterleiten. Verwenden Sie immer das always-Keyword, damit die Reporting-Header auch bei Fehlerseiten (404, 500) gesetzt werden.

Die Reporting API bringt 4 von 166 Punkten im Wolf-Agents Web Security Check. Nach der Konfiguration: Scannen Sie Ihre Domain, um zu verifizieren, dass die Header korrekt gesetzt sind.

1 Schritt 1 von 3

Report-To und NEL Header setzen

Fügen Sie die drei Reporting-Header in Ihren server-Block ein. Report-To definiert die Endpoint-Gruppen als JSON, NEL aktiviert Network Error Logging und Reporting-Endpoints registriert moderne Report-Endpoints.

/etc/nginx/conf.d/reporting.conf Reporting
# Report-To für NEL (komma-separierte JSON-Objekte)
add_header Report-To '{"group":"nel","max_age":31536000,"endpoints":[{"url":"https://reports.example.com/nel"}]}, {"group":"default","max_age":31536000,"endpoints":[{"url":"https://reports.example.com/default"}]}' always;

# NEL aktivieren
add_header NEL '{"report_to":"nel","max_age":31536000,"include_subdomains":true,"failure_fraction":1.0,"success_fraction":0.01}' always;

# Reporting-Endpoints für moderne Browser
add_header Reporting-Endpoints 'default="https://reports.example.com/default", csp="https://reports.example.com/csp"' always;

# CSP mit Reporting
add_header Content-Security-Policy "default-src 'self'; report-to csp" always;
JSON-Escaping in Nginx

Die JSON-Strings werden in einfache Anführungszeichen eingeschlossen. Innerhalb des JSON verwenden Sie normale doppelte Anführungszeichen. Das always-Keyword stellt sicher, dass die Header auch bei Fehlerseiten (404, 500) gesetzt werden.

Konfiguration prüfen und neu laden:
sudo nginx -t && sudo systemctl reload nginx
2 Schritt 2 von 3

Report-Endpoint per Proxy anbinden

Nginx kann JSON-Reports nicht selbst verarbeiten. Richten Sie einen location-Block ein, der eingehende Reports an Ihr Backend oder einen externen Reporting-Service weiterleitet. Browser senden Reports als POST mit dem Content-Type application/reports+json.

/etc/nginx/conf.d/reporting.conf Proxy
# Report-Endpoint an Backend weiterleiten
location /api/reports {
    # CORS für Browser-Reports (Cross-Origin)
    add_header Access-Control-Allow-Origin "*" always;
    add_header Access-Control-Allow-Methods "POST" always;
    add_header Access-Control-Allow-Headers "Content-Type" always;

    if ($request_method = OPTIONS) {
        return 204;
    }

    # An Backend weiterleiten
    proxy_pass http://127.0.0.1:3000;
    proxy_set_header Content-Type $content_type;
}
Warum CORS?

Browser senden Reporting-API-Reports Cross-Origin — auch wenn der Endpoint auf derselben Domain liegt. Ohne CORS-Header lehnt der Browser die Zustellung ab und die Reports gehen verloren.

3 Schritt 3 von 3

Header verifizieren

Prüfen Sie nach dem Reload, ob alle drei Header korrekt gesetzt werden. Verwenden Sie curl oder die Chrome DevTools (Application Panel > Reporting API).

Terminal Verifizierung
# Alle Reporting-Header prüfen
curl -sI https://ihre-domain.de | grep -iE "report-to|nel|reporting-endpoints"

# Erwartete Ausgabe:
# Report-To: {"group":"nel",...}, {"group":"default",...}
# NEL: {"report_to":"nel",...}
# Reporting-Endpoints: default="...", csp="..."
Browser sammeln Reports und senden sie gebündelt ca. alle 1 Minute. Reports treffen also nicht sofort ein — das ist normales Verhalten. Nutzen Sie chrome://net-internals/#reporting zur Diagnose.
Konfiguration prüfen und neu laden:
sudo nginx -t && sudo systemctl reload nginx

Wie steht Ihre Domain bei Reporting API?

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

Häufig gestellte Fragen

Wie escape ich JSON in Nginx add_header korrekt?

Verwenden Sie einfache Anführungszeichen um den gesamten JSON-Wert. Innerhalb des JSON nutzen Sie normale doppelte Anführungszeichen. Beispiel: add_header Report-To '{"group":"nel","max_age":31536000,"endpoints":[{"url":"https://example.com/nel"}]}' always;

Warum brauche ich das always-Keyword?

Ohne always setzt Nginx den Header nur bei erfolgreichen Responses (2xx/3xx). Mit always wird der Header auch bei Fehlerseiten (404, 500) gesetzt — wichtig, weil Angreifer gezielt Fehlerseiten für XSS nutzen und Sie auch dort Reporting benötigen.

Kann ich den Report-Endpoint direkt in Nginx hosten?

Nein. Nginx allein kann keine JSON-Reports verarbeiten. Sie benötigen ein Backend (Node.js, Python, Go etc.) oder einen externen Reporting-Service. Nginx kann Reports aber über proxy_pass an Ihr Backend weiterleiten.

Welche Browser unterstützen Report-To und NEL?

Report-To, NEL und Reporting-Endpoints werden ausschließlich von Chromium-basierten Browsern unterstützt — Chrome 70+, Edge 79+ und Opera. Firefox und Safari implementieren keinen dieser Header.

Werden Report-To und Reporting-Endpoints gleichzeitig benötigt?

Ja. Report-To ist für NEL (Network Error Logging) zwingend erforderlich, da NEL den neueren Reporting-Endpoints Header nicht unterstützt. Reporting-Endpoints wird für CSP-Violations und andere moderne Report-Typen verwendet. Beide Header parallel zu setzen ist die empfohlene Praxis.