Wie benutzt du dieses Tool?
- Eingabe-Modus wählen: visueller Block-Builder oder `.htaccess` zur Konvertierung einfügen.
- Voreinstellung laden (SPA, Node-Reverse-Proxy, Python-Uvicorn, WordPress, Strict-HTTPS, Load-Balancer) und Feld für Feld anpassen.
- Server-Block-Typ, TLS-Profil (Modern/Intermediate/Old), HTTP/2- und HTTP/3-Toggle setzen.
- Bei Reverse-Proxy- und Load-Balancer-Blocks WebSocket-Upgrade aktivieren; Rate-Limit-Profil wählen (Gentle, API, Strict).
- Konfiguration kopieren oder als `nginx.conf` herunterladen. Mit `sudo nginx -t` validieren und `sudo systemctl reload nginx` aktivieren.
Was macht der nginx-Config-Generator?
Der Generator ist ein Editor für nginx-Server-Blocks. Du wählst aus acht Block-Typen (statisches
Hosting, SPA-Fallback, Reverse-Proxy, PHP-FPM, Load-Balancer, reine Weiterleitung, TCP-Stream,
UDP-Stream), passt Felder wie server_name, root und upstream an, und der Generator setzt alle
nötigen Direktiven in der korrekten Reihenfolge zusammen. Optional kannst du eine bestehende
.htaccess einfügen — der Generator übersetzt Redirects, Rewrites, Header und ErrorDocuments
automatisch in nginx-Direktiven. Alles passiert im Browser. Kein Upload, kein Account, kein
Cookie-Banner.
Die sechs Voreinstellungen decken die häufigsten Stack-Konstellationen ab:
- SPA — statisches Hosting — Single-Page-App mit Astro/SvelteKit/Vite, Long-Cache für gehashte
Assets, Fallback auf
index.html, HTTP/3 aktiv. - Node.js — Reverse-Proxy — Node-/Bun-Server hinter nginx mit korrekt verdrahtetem WebSocket-Upgrade.
- Python — Uvicorn/ASGI — FastAPI oder Starlette via Uvicorn, Rate-Limit „API”.
- WordPress — PHP-FPM — PHP-FPM über Unix-Socket,
wp-config.phpund.envgesperrt. - Strict HTTPS — Audit-A — auf Mozilla-Observatory-A getrimmt, TLS 1.3, COOP/COEP/CORP.
- Load-Balancer — least_conn — nginx vor drei Backend-Knoten, Health-Failover über
max_fails.
Welche Server-Block-Typen sind eingebaut?
Acht Block-Typen, gegliedert nach Anwendungsfall:
- Statisches Hosting —
try_files $uri $uri/ =404;. Klassisch für Hugo, 11ty, plain HTML. - SPA-Fallback —
try_files $uri $uri/ /index.html;plus Long-Cache für gehashte Assets. Standard für jede Client-Side-Routing-App. - Reverse-Proxy —
proxy_passauf eine Upstream-URL, mit allen üblichenX-Forwarded-*-Headern. Optional WebSocket-Upgrade. - PHP-FPM —
fastcgi_passauf einen Unix-Socket, mittry_files-Permalinks und Deny-Regeln fürwp-config.php,.env,.git. - Load-Balancer —
proxy_pass http://backend_pool;plus das passendeupstream-Block-Template (auskommentiert, weilupstream {}außerhalb vonserver {}liegt). - Reine Weiterleitung —
return 301 https://www.example.com$request_uri;. Für www-Canonical- Umleitungen und Domain-Migrations. - TCP-Stream — für
stream {}-Scope, z. B. Postgres-/Redis-Proxying. Der Block kommentiert den Scope-Wechsel. - UDP-Stream — analog für DNS oder QUIC-Forward.
Wie funktioniert die HTTP/3- und QUIC-Unterstützung?
HTTP/3 löst HTTP/2 ab und nutzt QUIC statt TCP als
Transport. QUIC ist UDP-basiert, verlagert TLS in den Connection-Setup und eliminiert das
Head-of-Line-Blocking von HTTP/2. nginx hat QUIC seit Version 1.25 im offiziellen Build (vorher nur
im nginx-quic-Branch). Der Generator emittiert vier Direktiven, sobald du HTTP/3 aktivierst:
listen 443 quic reuseport;
listen [::]:443 quic reuseport;
http3 on;
ssl_early_data on;
add_header Alt-Svc 'h3=":443"; ma=86400' always;
Der Alt-Svc-Header signalisiert Browsern, dass HTTP/3 auf Port 443 verfügbar ist; ma=86400
cached diese Information für 24 Stunden. Browser, die HTTP/3 noch nicht beherrschen, ignorieren
den Header und bleiben auf HTTP/2.
Was macht die WebSocket-Upgrade-Korrektheit aus?
WebSocket-Reverse-Proxying bricht in den meisten naiven nginx-Configs, weil der Connection-Upgrade fehlt. Der korrekte Pattern besteht aus vier Teilen:
map-Direktive aufhttp {}-Scope — übersetzt den vom Client gesendetenUpgrade-Header in einen passendenConnection-Wert:map $http_upgrade $connection_upgrade { default upgrade; '' close; }proxy_set_header Upgrade $http_upgrade;— reicht das Upgrade-Signal an den Backend-Server.proxy_set_header Connection $connection_upgrade;— überschreibt das standardmäßigeConnection: close, das nginx sonst beim Reverse-Proxying setzt.proxy_read_timeout 86400s;— setzt das Read-Timeout auf 24 Stunden, damit Idle-WebSockets nicht nach 60 Sekunden (nginx-Default) getrennt werden.
Der Generator wickelt alle vier automatisch ein, sobald du die WebSocket-Checkbox in einem Reverse- Proxy- oder Load-Balancer-Block aktivierst. Das ist der häufigste Pain-Point in WebSocket-Setups — und der Hauptgrund für „warum bricht meine Verbindung ständig ab”-Bugs in Foren.
Welche Sicherheits-Header werden emittiert?
Sechs Header gehören in jeden modernen nginx-Block (siehe Mozilla Web Security Guidelines):
- Strict-Transport-Security — HSTS mit
max-age=31536000; includeSubDomains; preload. Preload ist standardmäßig aktiv, ein Toggle erlaubt das Abschalten für Sub-Domains, die nicht ohne HTTP funktionieren. - Content-Security-Policy — Starter-Wert mit
default-src 'self',frame-ancestors 'none'. Toggle für Report-Only-Modus während der Einführung. - Permissions-Policy — alles aus per Default (
camera=(),microphone=(),geolocation=(),payment=(),usb=(),interest-cohort=(),browsing-topics=()). - Cross-Origin-Opener-Policy —
same-origingegenwindow.opener-Attacken. - Cross-Origin-Embedder-Policy — optional
require-corpfür SharedArrayBuffer-Use-Cases. - Cross-Origin-Resource-Policy —
same-originblockiert Cross-Origin-Embeds eigener Assets.
Jeder Header trägt das always-Flag. Ohne always droppt nginx Header auf 4xx/5xx-Antworten — was
viele Audit-Tools (Mozilla Observatory, securityheaders.com) als A-Level-Verstoß werten. Vor dem
Deploy die CSP am externen CSP-Evaluator prüfen.
Wie funktioniert das Rate-Limit-Profil?
nginx-Rate-Limiting kombiniert zwei Direktiven:
limit_req_zoneaufhttp {}-Scope — reserviert Shared-Memory und definiert die Rate.limit_req zone=<name> burst=<n> nodelay;im Location-Block — referenziert die Zone.
Häufiger Fehler in publikem Online-Generatoren: Die Zone wird emittiert, aber die Location-Reference
fehlt — die Zone bleibt komplett ungenutzt (siehe das offene Issue im populärsten Online-Generator).
Der Generator emittiert beide zusammen und injiziert die Reference in den ersten location-Block
des Server-Blocks. Drei Profile:
- Gentle — 30 r/s, burst 50,
limit_conn 100. Für normale Webseiten mit echtem Nutzer-Traffic. - API — 10 r/s, burst 20,
limit_conn 50. Für REST-/GraphQL-APIs mit Token-basiertem Throttling. - Strict — 5 r/s, burst 10,
limit_conn 20. Für Login-Endpunkte, Webhook-Receiver, kritische Routen.
burst definiert, wie viele Requests zusätzlich zur Rate akzeptiert werden, bevor 429-Antworten
fliegen. nodelay heißt: Burst-Requests werden sofort verarbeitet, nicht über die Rate gepuffert.
Ohne nodelay würde nginx einen Burst-Request künstlich verzögern, was im Praxis-Use-Case meistens
nicht das gewünschte Verhalten ist.
Was macht der .htaccess-zu-nginx-Konverter?
Apache und nginx haben unterschiedliche Konfigurations-Modelle: Apache liest .htaccess pro Request
neu (kostet Performance, aber gibt Flexibilität), nginx parst seine Konfiguration einmal beim Reload
(schneller, aber kein Per-Request-Override). Eine vollständige 1:1-Konvertierung gibt es nicht, aber
die wichtigsten Direktiven sind mappbar:
| Apache | nginx |
|---|---|
Redirect 301 /old /new | rewrite ^/old$ /new permanent; |
Redirect 302 /a /b | rewrite ^/a$ /b redirect; |
RewriteRule ^foo$ /bar [L] | rewrite ^foo$ /bar last; |
RewriteRule … [R=301,L] | rewrite … permanent; |
Header always set X-Frame-Options DENY | add_header X-Frame-Options "DENY" always; |
ErrorDocument 404 /404.html | error_page 404 /404.html; |
Options -Indexes | autoindex off; |
Require ip 192.168.1.1 | allow 192.168.1.1; |
Deny from 203.0.113.4 | deny 203.0.113.4; |
<IfModule> | wird flach kommentiert (nginx hat kein Module-Conditional) |
Nicht-mappbare Direktiven kommen als # TODO (could not convert): …-Kommentar zurück. Der
Konverter ist deterministisch — gleicher Input liefert immer gleichen Output, kein KI-Rate-Limit,
keine Cloud-Roundtrips. Der Hinweis am Anfang („paste inside your nginx server { ... } block”)
ist Pflicht-Lese-Stoff — die emittierten Direktiven gehören in den richtigen Scope.
Welche Pain-Points umgehe ich mit diesem Generator?
Vier Klassiker, die in nginx-Tutorials immer wieder auftauchen — und die der Generator vermeidet:
- WebSocket bricht nach 60 Sekunden — die häufigste Ursache ist das fehlende
proxy_read_timeout 86400s;plus die unkorrekten Upgrade-Header. Der Generator setzt beides automatisch. - Rate-Limit-Zone ohne Reference — die
limit_req_zonewird emittiert, aberlimit_reqim Location-Block fehlt. Wirkung: Null. Der Generator emittiert beide zusammen. - Security-Header verschwinden auf Fehler-Seiten — ohne
alwaysdroppt nginx Header auf 4xx/5xx-Responses. Der Generator setztalwaysauf jedenadd_header. - HTTP/3 falsch konfiguriert — fehlendes
reuseport, fehlendesssl_early_data, keinAlt-Svc-Header. Der Generator emittiert alle vier Direktiven, sobald HTTP/3 aktiviert ist.
Wie ist die Privacy geregelt?
Pure-client. Der Generator läuft komplett im Browser. Es gibt keinen Server-Endpunkt für die
Konfiguration-Validierung, keinen Telemetrie-Aufruf, keinen Cookie, keinen Account. Wenn du das Tab
schließt, sind deine Einstellungen weg — der Generator persistiert nichts. Wer einen Verlauf
braucht, lädt nach jedem Edit die nginx.conf herunter und versioniert sie im Repo.
Was ist absichtlich nicht gebaut?
- Keine Live-Validierung mit
nginx -t— würde einen Server-Roundtrip oder einen WebAssembly-Port von nginx selbst benötigen. Stattdessen verweist der Generator-Header und der UI-Hinweis aufsudo nginx -tnach dem Deploy. - Kein automatisches Let’s-Encrypt-Issuance — der Generator emittiert nur das Certbot-Webroot- Snippet. Das Aktivieren des Zertifikats braucht Server-Zugriff und ist außerhalb des Browser-Scopes.
- Kein Nginx-Proxy-Manager-GUI-Modus — wer einen GUI-First-Workflow will, nutzt Nginx Proxy Manager direkt. Dieser Generator ist für Devs, die Konfiguration als Code halten.
- Keine
ngx_mod_security-Regeln — WAF-Tuning ist ein eigenes Tool (zu spezialisiert, zu ruleset-spezifisch). - Keine Apache-2.2-Variante —
.htaccess2.2 deckt das Schwester-Toolhtaccess-generatorab. - Kein Caching-Profil-Editor — die emittierten
gzip-Defaults und die Long-Cache-Regel im SPA-Block reichen für den 90-%-Use-Case.
Wo finde ich mehr Details?
- nginx-Dokumentation — offizielle Direktiven-Referenz
- nginx auf Wikipedia — Geschichte, Architektur, Einsatzgebiete
- Mozilla SSL Configuration Generator — TLS-Profile-Referenz
- hstspreload.org — Submission-Liste für HSTS-Preload-Domains
- CSP Evaluator — externer Validator für Content-Security-Policy
- RFC 9114 (HTTP/3) — HTTP/3-Spezifikation
- Cloudflare Learning Center — WebSocket — WebSocket-Protokoll-Grundlagen
Zuletzt aktualisiert: