Muss: Compose-Service + Upstream + Route /service/c.
Zusatz: backends/c/index.html ist vorhanden und darf angepasst werden.
Zweite Instanz von Backend A (backend-a2) einbauen und Round-Robin zeigen.
Warum wichtig: Lastverteilung ist Kernnutzen eines Reverse Proxys fuer Skalierung und Verfuegbarkeit.
for i in $(seq 1 8); do
@@ -255,17 +256,18 @@ done
Mindestens einen Backend-Response-Header per proxy_hide_header ausblenden.
Abgrenzung zu #4: #4 setzt Schutz-Header, #6b entfernt unnoetige Header aus Upstream-Responses.
+Abgrenzung zu #4: #4 setzt Schutz-Header, #8 entfernt unnoetige Header aus Upstream-Responses.
Warum wichtig: Weniger preisgegebene Metadaten erschweren Fingerprinting und zielgerichtete Angriffe.
curl -I http://localhost:8080/service/a
Mit proxy/nginx.broken.conf arbeiten, Fehler finden und reparieren.
Warum wichtig: In der Praxis geht es oft um Diagnose unter Zeitdruck, nicht nur um Greenfield-Konfiguration.
+Typische Fehler in der kaputten Datei: Upstream-Name-Mismatch, falscher Port, fehlender Trailing Slash in proxy_pass.
curl http://localhost:8080/service/a
curl http://localhost:8080/service/b
./scripts/compose.sh logs reverse-proxy
@@ -276,22 +278,22 @@ curl http://localhost:8080/service/b
Zertifikat fuer localhost, Port 8443:443, Root-CA importiert.
Warum wichtig: TLS-Grundaufbau ist Voraussetzung fuer vertrauliche und manipulationssichere Kommunikation.
curl https://localhost:8443/service/a
Voraussetzung: Challenge 7 abgeschlossen. Bestehende Config weiterverwenden.
+Voraussetzung: Challenge 10 abgeschlossen. Bestehende Config weiterverwenden.
Warum wichtig: Redirect verhindert unabsichtliche Klartext-Nutzung und erzwingt den sicheren Transport.
curl -I http://localhost:8080/service/a
Voraussetzung: Challenge 7 und 8 abgeschlossen. Gleiche Config weiter erweitern.
+Voraussetzung: Challenge 10 und 11 abgeschlossen. Gleiche Config weiter erweitern.
Warum wichtig: Erst Haertung + HSTS reduzieren Downgrade-Risiken und sorgen fuer dauerhaft sichere Clients.
curl -I https://localhost:8443/service/a
openssl s_client -connect localhost:8443 -servername localhost
@@ -302,7 +304,7 @@ openssl s_client -connect localhost:8443 -servername localhost
Warum wichtig: Sichtbarkeit auf Paketebene macht den Sicherheitsgewinn von TLS fuer alle nachvollziehbar.
8080 mitschneiden und Klartext zeigen.Nur Runtime-Certs mounten (z. B. certs/live), nicht die komplette PKI.
Dateien: docker-compose.yml, proxy/nginx.conf, backends/a2/index.html
Commands noetig: ja
Compose (backend-a2):
@@ -293,10 +294,10 @@ doneDateien: proxy/nginx.conf
Commands noetig: ja
-Abgrenzung zu #4: #4 fuegt Schutz-Header hinzu, #6b entfernt unnoetige Upstream-Metadaten.
+Abgrenzung zu #4: #4 fuegt Schutz-Header hinzu, #8 entfernt unnoetige Upstream-Metadaten.
location /service/a {
proxy_pass http://backend_a/;
proxy_hide_header ETag;
@@ -306,14 +307,23 @@ done
Dateien: proxy/nginx.broken.conf, proxy/nginx.conf
Commands noetig: ja
-Kopiere testweise proxy/nginx.broken.conf auf proxy/nginx.conf, behebe die Fehler und stelle danach die funktionierende Konfiguration wieder her.
Ablauf: Kopiere testweise proxy/nginx.broken.conf auf proxy/nginx.conf, behebe die Fehler und stelle danach die funktionierende Konfiguration wieder her.
cp proxy/nginx.broken.conf proxy/nginx.conf
make proxy-reload
./scripts/compose.sh logs reverse-proxy
+ Konkrete Fehler und Fixes:
+backend_a_typo ist definiert, aber backend_a wird referenziert -> Namen angleichen.backend-a:8080 -> auf backend-a:80 korrigieren./service/b fehlt der Trailing Slash bei proxy_pass -> proxy_pass http://backend_b/;.Check: beide Routen funktionieren wieder.
+curl http://localhost:8080/service/a
+curl http://localhost:8080/service/b
+./scripts/compose.sh logs reverse-proxy
Dateien: docker-compose.yml, proxy/nginx.conf, certs/easyrsa/*
Commands noetig: ja
mkdir -p certs/easyrsa
@@ -337,13 +347,15 @@ cd certs/easyrsa
- "8080:80"
- "8443:443"
volumes:
- - ./certs/easyrsa/pki:/etc/nginx/pki:ro,z
+ - ./certs/live:/etc/nginx/certs:ro,z
+ Wichtig: Nicht die komplette PKI in den Container mounten. Nur Runtime-Zertifikat + Key bereitstellen.
+Nginx TLS-Pfade: ssl_certificate /etc/nginx/certs/localhost.crt; und ssl_certificate_key /etc/nginx/certs/localhost.key;
Check: curl https://localhost:8443/service/a (ohne -k nach CA-Import)
Voraussetzung: Challenge 7 abgeschlossen (gleiches Config-File weiterverwenden).
+Voraussetzung: Challenge 10 abgeschlossen (gleiches Config-File weiterverwenden).
Dateien: proxy/nginx.conf
Commands noetig: ja
server {
@@ -363,8 +375,8 @@ cd certs/easyrsa
Voraussetzung: Challenge 7 und 8 abgeschlossen.
+Voraussetzung: Challenge 10 und 11 abgeschlossen.
Dateien: proxy/nginx.conf
Commands noetig: ja
ssl_protocols TLSv1.2 TLSv1.3;
@@ -381,7 +393,7 @@ openssl s_client -connect localhost:8443 -servername localhost
Dateien: keine Pflicht-Datei; optional Wireshark Settings und Keylog-Datei
Commands noetig: ja
Schritt 1 - HTTP Capture:
@@ -394,7 +406,7 @@ openssl s_client -connect localhost:8443 -servername localhostSchritt 2 - HTTPS Capture:
tcp.port == 8443 oder tls setzen.curl https://localhost:8443/service/a.ClientHello, ServerHello, Certificate.