nginx-Doku: location · proxy_pass
Muss: zuerst in proxy/nginx.conf nachsehen, dann testen.
Warum wichtig: Routing ist die Grundfunktion jedes Reverse Proxys - ohne sauberes Matching ist alles andere instabil.
nginx-Doku: upstream · proxy_pass
Muss: Compose-Service + Upstream + Route /service/c.
Zusatz: backends/c/index.html ist vorhanden und darf angepasst werden.
Warum wichtig: Neue Services kommen laufend dazu; Erweiterungen ohne Seiteneffekte sind Praxisalltag.
@@ -220,6 +222,7 @@ curl http://localhost:8080/service/b # -> weiterhin "Target B"nginx-Doku: rewrite · location
Muss: Alias-Route bauen, die auf Backend A fuehrt.
Warum wichtig: Der Proxy entkoppelt externe Pfade von internen Backend-Implementierungen.
Zielzustand: /demo/a liefert dieselbe Antwort wie /service/a.
nginx-Doku: add_header
Setze mindestens nosniff, DENY, strict-origin-when-cross-origin, Permissions-Policy, COOP, CORP.
Optional: CSP fuer statische Seiten.
Warum wichtig: Diese Header reduzieren konkrete Browser-Angriffsvektoren und gehoeren zur Security-Baseline.
@@ -242,6 +246,7 @@ curl http://localhost:8080/service/b # -> weiterhin "Target B"nginx-Doku: ngx_http_access_module (allow/deny)
Muss: /internal/status nur fuer 127.0.0.1.
Wichtig: Host-Request zeigt typischerweise 403 (Docker-Netzwerk).
Warum wichtig: Nicht jeder Endpoint darf oeffentlich erreichbar sein; Netzsegmentierung beginnt oft am Proxy.
@@ -252,6 +257,7 @@ curl http://localhost:8080/service/b # -> weiterhin "Target B"nginx-Doku: log_format
Eigenes log_format mit Upstream-Infos einbauen.
Hinweis: log_format gehoert in den http {}-Block, sonst startet Nginx nicht.
Warum wichtig: Ohne brauchbare Logs dauert Fehleranalyse deutlich laenger und Incident-Response wird unzuverlaessig.
@@ -262,6 +268,7 @@ curl http://localhost:8080/service/b # -> weiterhin "Target B"nginx-Doku: Load Balancing (Guide) · upstream
Zweite Instanz von Backend A (backend-a2) einbauen und Round-Robin zeigen.
Warum wichtig: Lastverteilung ist Kernnutzen eines Reverse Proxys fuer Skalierung und Verfuegbarkeit.
Zielzustand: Ueber mehrere Requests antworten beide Instanzen (Mischung aus A und A2).
@@ -272,6 +279,7 @@ done # -> Mischung aus "INSTANCE=A" und "INSTANCE=A2"nginx-Doku: proxy_hide_header
Mindestens einen Backend-Response-Header per proxy_hide_header ausblenden.
Abgrenzung zu #4: #4 setzt Schutz-Header, #8 entfernt unnoetige Header aus Upstream-Responses.
Warum wichtig: Weniger preisgegebene Metadaten erschweren Fingerprinting und zielgerichtete Angriffe.
@@ -281,6 +289,7 @@ done # -> Mischung aus "INSTANCE=A" und "INSTANCE=A2"nginx-Doku: proxy_pass (Trailing-Slash-Semantik) · upstream
Mit proxy/nginx.broken.conf arbeiten, Fehler finden und reparieren.
Zuerst sichern: diese Challenge ueberschreibt deine nginx.conf → vorher cp proxy/nginx.conf proxy/nginx.conf.bak, am Ende zurueckkopieren.
Warum wichtig: In der Praxis geht es oft um Diagnose unter Zeitdruck, nicht nur um Greenfield-Konfiguration.
@@ -297,6 +306,7 @@ curl http://localhost:8080/service/b # -> "Target B"Doku: HTTPS-Server konfigurieren · ngx_http_ssl_module · Easy-RSA
Zertifikat fuer localhost, Port 8443:443, Root-CA importiert.
Wichtig: Der neue Port ist eine Compose-Aenderung → mit ./scripts/lab.sh redeploy deployen, nicht nur ./scripts/lab.sh proxy-reload.
Warum wichtig: TLS-Grundaufbau ist Voraussetzung fuer vertrauliche und manipulationssichere Kommunikation.
@@ -306,6 +316,7 @@ curl http://localhost:8080/service/b # -> "Target B"nginx-Doku: return
Voraussetzung: Challenge 10 abgeschlossen. Bestehende Config weiterverwenden.
Warum wichtig: Redirect verhindert unabsichtliche Klartext-Nutzung und erzwingt den sicheren Transport.
Zielzustand: HTTP auf 8080 antwortet mit 301 und Location: https://localhost:8443/....
Doku: ssl_protocols · add_header · HSTS (MDN)
Voraussetzung: Challenge 10 und 11 abgeschlossen. Gleiche Config weiter erweitern.
Warum wichtig: Erst Haertung + HSTS reduzieren Downgrade-Risiken und sorgen fuer dauerhaft sichere Clients.
Warnung (HSTS-Falle): Der Browser merkt sich HSTS host-weit fuer localhost (nicht pro Port). Nach https://localhost:8443 wird auch http://localhost:8080 auf https erzwungen. Zum Testen curl nutzen; Browser-HSTS ggf. unter chrome://net-internals/#hsts fuer localhost loeschen. max-age ist im Lab bewusst kurz (1h).
Doku: Wireshark: TLS
Warum wichtig: Sichtbarkeit auf Paketebene macht den Sicherheitsgewinn von TLS fuer alle nachvollziehbar.
8080 mitschneiden und Klartext zeigen.