Claude Code Nginx: Konfiguration, Reverse Proxy und SSL in Minuten

Nginx ist eines jener Werkzeuge, die man entweder auswendig beherrscht oder bei jedem Einsatz neu nachschlägt. Die Dokumentation ist vollständig, die Community-Ressourcen sind zahlreich — aber der Weg vom Ziel ("ich möchte einen Reverse Proxy vor meiner Node-App") zur funktionierenden Konfiguration ist voller kleiner Stolperstellen: falsche proxy_set_header-Werte, vergessenes upstream-Block, HTTPS-Redirect der HTTP/2 nicht aktiviert.

Claude Code Nginx-Workflows ändern das. Nicht weil sie Nginx einfacher machen — sondern weil Claude Code die Konfiguration generiert, Fehler im laufenden Betrieb diagnostiziert und Performance-Tuning-Vorschläge direkt auf deine nginx.conf anwendet. Dieser Artikel zeigt, wie das konkret aussieht.

Claude Code Mastery — Server, Nginx, Deployment auf Deutsch

Nginx ist nur ein Beispiel. Im Kurs lernst du, wie du Claude Code für den gesamten Entwicklungs- und Deployment-Stack einsetzt — von der Konfiguration bis zum autonomen Agent. Einmalig bezahlt, kein Abo.

Zum Kurs — Jetzt starten → Einmalzahlung · Kein Abo · 14 Tage Rückgaberecht

1. Was ist Nginx — und warum ist es überall?

Nginx (ausgesprochen "Engine-X") ist ursprünglich als Webserver gestartet, der gleichzeitige Verbindungen effizienter verarbeitet als Apache. Heute ist es in den meisten modernen Infrastrukturen dreifach im Einsatz: als Webserver für statische Dateien, als Reverse Proxy vor Anwendungsservern und als Load Balancer zwischen mehreren Backend-Instanzen.

Warum so verbreitet? Nginx verarbeitet zehntausende gleichzeitige Verbindungen mit minimalem Speicherverbrauch, weil es ein ereignisgesteuertes (non-blocking) Modell verwendet statt eines Thread-pro-Verbindung-Ansatzes. Das macht es zur ersten Wahl für alles, was im öffentlichen Internet steht.

2. Grundkonfiguration: nginx.conf, Server Blocks, Location Blocks

Die Nginx-Konfiguration folgt einer klaren Hierarchie. Oben steht die globale nginx.conf, darunter http-Block, darunter server-Blocks für einzelne virtuelle Hosts, darunter location-Blocks für URL-Pfade.

# /etc/nginx/sites-available/mein-projekt.conf

server {
    listen 80;
    server_name mein-projekt.de www.mein-projekt.de;
    root /var/www/mein-projekt/public;
    index index.html;

    location / {
        try_files $uri $uri/ =404;
    }

    location ~* \.(js|css|png|jpg|svg|woff2)$ {
        expires 1y;
        add_header Cache-Control "public, immutable";
    }
}

Claude Code kann diese Grundstruktur in Sekunden generieren. Der entscheidende Vorteil: Claude Code fragt nach deinem konkreten Anwendungsfall und passt die Konfiguration an, statt eine generische Vorlage zu liefern.

claude "Erstelle eine Nginx server block Konfiguration für eine
statische Next.js App unter /var/www/nextjs-app/out,
Domain: mein-projekt.de, gzip aktivieren, lange Cache-Header
für Assets mit Hash im Dateinamen"

Tipp: Symlink nach /etc/nginx/sites-enabled/ nicht vergessen: ln -s /etc/nginx/sites-available/mein-projekt.conf /etc/nginx/sites-enabled/. Danach nginx -t zum Testen und systemctl reload nginx zum Aktivieren. Claude Code erklärt diesen Workflow auf Nachfrage vollständig.

3. Reverse Proxy Setup: proxy_pass und proxy_set_header

Der häufigste Nginx-Einsatz in modernen Stacks: eine Node.js-, Python- oder Go-Anwendung lauscht auf einem lokalen Port, Nginx nimmt die öffentlichen Anfragen entgegen und leitet sie weiter. Das schützt die Anwendung vor dem direkten Internet-Zugriff und ermöglicht SSL-Terminierung, Caching und Kompression auf Nginx-Ebene.

upstream app_backend {
    server 127.0.0.1:3000;
    keepalive 32;
}

server {
    listen 80;
    server_name api.mein-projekt.de;

    location / {
        proxy_pass http://app_backend;
        proxy_http_version 1.1;

        # Wichtig: Original-IP und Host weitergeben
        proxy_set_header Host              $host;
        proxy_set_header X-Real-IP         $remote_addr;
        proxy_set_header X-Forwarded-For   $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;

        # WebSocket-Unterstützung
        proxy_set_header Upgrade    $http_upgrade;
        proxy_set_header Connection "upgrade";

        # Timeouts
        proxy_connect_timeout 60s;
        proxy_send_timeout    60s;
        proxy_read_timeout    60s;
    }
}

Die proxy_set_header-Direktiven sind kritisch: Ohne X-Forwarded-For sieht deine Anwendung nur die lokale Nginx-IP statt der echten Client-IP. Ohne X-Forwarded-Proto weiß sie nicht, ob die originale Anfrage per HTTP oder HTTPS kam — ein häufiger Fehler bei HTTPS-Redirects in der Anwendung selbst.

"Zeige mir die aktuelle proxy_pass-Konfiguration, ich prüfe ob X-Forwarded-For korrekt gesetzt ist und ob keepalive für deinen Traffic sinnvoll ist."

So antwortet Claude Code, wenn du eine bestehende Konfiguration zur Analyse übergibst. Es liest die Datei, erkennt fehlende oder falsche Header und gibt konkrete Korrekturvorschläge — mit Begründung.

4. SSL/TLS mit Let's Encrypt: Certbot, HTTPS-Redirect, HSTS

Heute ist HTTPS kein Optional-Feature mehr — Browser warnen vor unverschlüsselten Seiten, Suchmaschinen bevorzugen HTTPS, und ohne SSL funktionieren HTTP/2 und viele moderne Browser-APIs nicht. Let's Encrypt bietet kostenlose, automatisch erneuerbare Zertifikate. Certbot automatisiert die Installation.

# Certbot installieren und Zertifikat ausstellen
sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx -d mein-projekt.de -d www.mein-projekt.de

Certbot modifiziert die Nginx-Konfiguration automatisch. Das Ergebnis sieht typischerweise so aus:

server {
    listen 443 ssl http2;
    server_name mein-projekt.de www.mein-projekt.de;

    ssl_certificate     /etc/letsencrypt/live/mein-projekt.de/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/mein-projekt.de/privkey.pem;

    # Moderne SSL-Konfiguration
    ssl_protocols       TLSv1.2 TLSv1.3;
    ssl_ciphers         ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:...;
    ssl_prefer_server_ciphers off;
    ssl_session_cache   shared:SSL:10m;
    ssl_session_timeout 1d;

    # HSTS: Browser merken sich, dass diese Domain immer HTTPS braucht
    add_header Strict-Transport-Security "max-age=63072000" always;

    # ... rest der Konfiguration
}

server {
    listen 80;
    server_name mein-projekt.de www.mein-projekt.de;
    return 301 https://$host$request_uri;
}

Vorsicht bei HSTS: Sobald der Strict-Transport-Security-Header mit einem langen max-age aktiv ist, werden alle Browser für diesen Zeitraum ausschließlich HTTPS verwenden — auch wenn du HTTP später wieder aktivieren möchtest. Teste zuerst mit kurzer Laufzeit (max-age=300) bevor du auf 63072000 (2 Jahre) gehst.

Claude Code kann eine bestehende HTTP-Konfiguration in eine vollständige HTTPS-Konfiguration mit HSTS, OCSP-Stapling und sicheren Cipher-Suites umschreiben — und erklärt jeden Parameter dabei:

claude "Optimiere diese Nginx SSL-Konfiguration auf Sicherheit
und Performance. Füge OCSP-Stapling, HTTP/2, HSTS und einen
A+ Score auf SSL Labs hinzu." < /etc/nginx/sites-available/mein-projekt.conf

5. Load Balancing: upstream, least_conn, ip_hash

Wenn eine einzelne Backend-Instanz nicht mehr ausreicht, verteilt Nginx den Traffic auf mehrere. Die Konfiguration ist überraschend kompakt — der upstream-Block enthält die Backend-Liste, der Rest bleibt gleich:

upstream app_cluster {
    # Standard: Round Robin (gleichmäßige Verteilung)
    server 10.0.0.1:3000;
    server 10.0.0.2:3000;
    server 10.0.0.3:3000;

    # Alternativ: least_conn (immer zur am wenigsten ausgelasteten Instanz)
    # least_conn;

    # Alternativ: ip_hash (gleicher Client immer zur gleichen Instanz — Session-Affinity)
    # ip_hash;

    keepalive 64;
}

server {
    listen 443 ssl http2;
    server_name api.mein-projekt.de;

    location / {
        proxy_pass http://app_cluster;
        # ... proxy_set_header wie oben
    }
}

Welche Load-Balancing-Methode passt wann? Claude Code erklärt das anhand deines konkreten Anwendungsfalls: least_conn eignet sich für Anfragen mit unterschiedlicher Bearbeitungsdauer (z.B. API-Calls), ip_hash ist sinnvoll wenn Sitzungsdaten lokal auf dem Backend gespeichert sind und kein zentrales Session-Store vorhanden ist.

6. Caching: proxy_cache und Cache-Control-Header

Nginx kann Antworten des Backends zwischenspeichern und wiederholen — ohne die Anwendung erneut zu befragen. Für statische oder selten wechselnde Inhalte reduziert das die Backend-Last erheblich.

# In nginx.conf (http-Block)
proxy_cache_path /var/cache/nginx
    levels=1:2
    keys_zone=app_cache:10m
    max_size=1g
    inactive=60m
    use_temp_path=off;

# Im server-Block
location /api/products {
    proxy_pass         http://app_backend;
    proxy_cache        app_cache;
    proxy_cache_valid  200 10m;   # 200er Antworten 10 Minuten cachen
    proxy_cache_valid  404  1m;   # 404er Antworten 1 Minute cachen
    proxy_cache_use_stale error timeout updating http_500 http_502 http_503;
    add_header X-Cache-Status $upstream_cache_status;
}

Der X-Cache-Status-Header zeigt im Browser, ob eine Antwort aus dem Cache kam (HIT) oder frisch vom Backend (MISS) — nützlich beim Debugging. Claude Code kann eine komplette Cache-Strategie für deinen Stack entwerfen und dabei berücksichtigen, welche Endpunkte gecacht werden sollen und welche nicht.

7. Claude Code Nginx-Tipps: Konfiguration generieren, Fehler debuggen, Performance tunen

Hier sind die Einsatzszenarien, die im Alltag am meisten Zeit sparen:

Konfiguration aus Anforderungen generieren

Statt Dokumentation zu lesen und Konfigurationsschnipsel zusammenzusetzen, beschreibst du das Ziel:

claude "Erstelle eine produktionsreife Nginx-Konfiguration für:
- Domain: app.beispiel.de
- Backend: Node.js auf Port 3000
- SSL via Let's Encrypt (Zertifikat liegt bereits vor)
- WebSocket-Unterstützung für /ws
- Statische Dateien aus /var/www/app/public direkt ausliefern
- Rate Limiting: max 100 Requests/Minute pro IP"

Fehler aus dem Error-Log diagnostizieren

claude "Was bedeutet dieser Nginx-Fehler und wie behebe ich ihn?" < /var/log/nginx/error.log

Claude Code liest das Log, identifiziert wiederkehrende Fehlertypen, trennt primäre Fehler von Folgefehlern und gibt konkrete Lösungsschritte. Typische Fehlerklassen die Claude Code zuverlässig diagnostiziert: upstream timed out, connect() failed, no live upstreams, SSL-Handshake-Fehler.

Bestehende Konfiguration optimieren

cat /etc/nginx/sites-available/mein-projekt.conf | claude "Analysiere
diese Nginx-Konfiguration auf Performance-Probleme. Ich möchte
gzip aktivieren, HTTP/2 Push nutzen und die Worker-Prozesse
optimal für einen 8-Core-Server konfigurieren."

Claude Code erkennt fehlende Optimierungen (gzip_comp_level zu hoch, worker_processes nicht auf auto gesetzt, sendfile nicht aktiviert) und schlägt eine überarbeitete Konfiguration vor, die du direkt einsetzen kannst.

Zwei verwandte Artikel die dieses Thema ergänzen:


Claude Code Mastery — vom Nginx-Setup bis zum autonomen Agent

Nginx-Konfiguration ist ein Beispiel dafür, was Claude Code können kann. Im Kurs lernst du Agents, MCP-Server, Hooks und Multi-Agent-Workflows — vollständig auf Deutsch, einmalig bezahlt.

Jetzt starten → Einmalzahlung · Kein Abo · 14 Tage Rückgaberecht

Kurs · Claude Code Mastery

Von Nginx bis zum produktiven AI-Agenten

Server-Konfiguration. Debugging. Agents. MCP. Hooks. Alles auf Deutsch, einmalig bezahlt — kein Abo, keine Plattformabhängigkeit.

Jetzt einsteigen → Kursübersicht ansehen →

Einmalzahlung · Kein Abo · 14 Tage Rückgaberecht