Reverse Proxy: Grundlagen für Service-Konsolidierung

Reverse Proxy: Grundlagen für Service-Konsolidierung

SSL-Terminierung, Domain-basiertes Routing und Backend-Kommunikation. Reverse Proxy-Konzepte für Service-Konsolidierung und sichere Self-Hosting-Architekturen.

Verwendete Software und Versionen

Diese Erklärung bezieht sich auf:

  • HTTP-Protokoll: HTTP/1.1, HTTP/2, HTTP/3
  • SSL/TLS: Version 1.2+ für sichere Verbindungen
  • Reverse Proxy-Konzepte: Plattform-unabhängige Grundlagen
  • Kontext: Distributions-übergreifende Proxy-Grundlagen

Reverse Proxy vermittelt zwischen Clients und Backend-Services

Ein Reverse Proxy empfängt Client-Anfragen und leitet sie an Backend-Services weiter - das Gegenteil eines Forward Proxy, der Client-Requests zu externen Servern vermittelt. Diese Vermittlung ermöglicht Service-Konsolidierung: Zehn verschiedene Web-Anwendungen nutzen eine öffentliche IP-Adresse über Port 443, statt separate IPs oder Ports pro Service zu benötigen.

Artikel 1 und Artikel 5 erklären IP-Adressen, Ports und Firewall-Konzepte. Reverse Proxy erweitert diese um Service-Vermittlung: Plausible Analytics lauscht intern auf Port 8000, Matrix Synapse auf Port 8008, Listmonk auf Port 9000. Der Reverse Proxy empfängt alle HTTPS-Requests auf Port 443 und entscheidet anhand des HTTP-Host-Headers, welcher Backend-Service die Anfrage verarbeitet.

Client-Requests enthalten Domain-Information im Host-Header: GET / HTTP/1.1 Host: analytics.example.com. Der Proxy liest diesen Header und leitet den Request an das entsprechende Backend weiter - analytics.example.com zu 127.0.0.1:8000, chat.example.com zu 127.0.0.1:8008. Clients sehen nur Standard-HTTP-Ports 80/443, Backend-Services können beliebige interne Ports verwenden.

Diese Host-Header-Vermittlung funktioniert transparent: Browser senden normale HTTPS-Requests, der Proxy übersetzt sie zu HTTP-Backend-Requests. Antworten durchlaufen den umgekehrten Weg - Backend-Response wird zu Client-Response weitergeleitet. Clients erkennen nicht, dass Backend-Services auf anderen Ports oder IP-Adressen laufen.

SSL-Terminierung zentralisiert Verschlüsselung und Zertifikat-Management

HTTPS-Verbindungen erfordern TLS-Handshake, Zertifikat-Validierung und Ver-/Entschlüsselung für jeden Request. SSL-Terminierung am Reverse Proxy konzentriert diese kryptographischen Operationen zentral. Client-Verbindungen werden am Proxy entschlüsselt, Backend-Kommunikation erfolgt unverschlüsselt über localhost oder private Netzwerke.

Der Proxy verwaltet SSL-Zertifikate und private Schlüssel für alle Domains zentral. Ein Wildcard-Zertifikat für *.example.com deckt analytics.example.com, chat.example.com und newsletter.example.com ab. Die Backend-Services implementieren nur HTTP - die SSL-Konfiguration existiert nur einmal am Proxy statt in jedem Service.

SSL-Terminierung ermöglicht moderne TLS-Features ohne Backend-Modifikationen. HTTP/2 multiplext mehrere Requests über eine TCP-Verbindung und reduziert Latenz. Perfect Forward Secrecy generiert temporäre Schlüssel pro Session - kompromittierte Server-Schlüssel können vergangene Verbindungen nicht entschlüsseln. OCSP Stapling prüft Zertifikat-Gültigkeit vorab und reduziert Client-Latenz beim TLS-Handshake.

Client (HTTPS Port 443) → Reverse Proxy (SSL-Terminierung) → Backend (HTTP Port 8000)

Backend-Services erhalten Client-Informationen über HTTP-Header: X-Forwarded-For für Client-IP, X-Forwarded-Proto: https für ursprüngliches Protokoll, X-Real-IP für ursprüngliche Quell-Adresse. Diese Header ermöglichen korrektes Backend-Logging und IP-basierte Zugriffskontrolle trotz Proxy-Vermittlung.

Domain-basiertes Routing nutzt HTTP-Host-Header für Service-Auswahl

HTTP/1.1 führte den Host-Header für Virtual Hosting ein - mehrere Websites über eine IP-Adresse. Reverse Proxies nutzen diesen Mechanismus für Backend-Auswahl: Identische URLs werden je nach Domain an verschiedene Services weitergeleitet.

Wildcard-Domains skalieren automatisch: Eine Regel für *.api.example.com fängt v1.api.example.com und v2.api.example.com ab. Subdomain-Pattern leiten verschiedene API-Versionen an entsprechende Backend-Services weiter. Neue Subdomains erben automatisch die passenden Routing-Regeln ohne manuelle Konfiguration.

Path-basiertes Routing kombiniert Domain und URL-Pfad für granulare Service-Aufteilung: example.com/api/* zu API-Server Port 3000, example.com/admin/* zu Admin-Interface Port 4000, example.com/* zu Frontend-Website Port 5000. Eine Domain bedient mehrere spezialisierte Backend-Services basierend auf URL-Struktur.

Diese Routing-Flexibilität ermöglicht Service-Architekturen mit klarer Trennung. API-Backend, Admin-Interface und öffentliche Website laufen als separate Prozesse mit eigenen Skalierungs-Charakteristiken, werden aber über einheitliche Domain-Namen zugänglich gemacht.

Backend-Kommunikation überträgt Client-Kontext über HTTP-Header

Backend-Services hinter Reverse Proxies verlieren den direkten Client-Kontakt - alle Requests scheinen vom Proxy zu stammen. HTTP-Header übertragen Original-Client-Informationen: X-Forwarded-For für Client-IP, X-Forwarded-Proto für ursprüngliches Protokoll, X-Forwarded-Host für angefragte Domain.

Proxy-zu-Backend-Requests ergänzen die Standard-HTTP-Header um Client-Kontext:

Original Client-Request:
GET /dashboard HTTP/1.1
Host: analytics.example.com

Proxy-zu-Backend-Request:  
GET /dashboard HTTP/1.1
Host: analytics.example.com
X-Forwarded-For: 203.0.113.25
X-Forwarded-Proto: https
X-Real-IP: 203.0.113.25

Backend-Services müssen diese Header für korrektes Verhalten auswerten. Logging-Systeme verwenden X-Forwarded-For für echte Client-IPs statt Proxy-Adressen. Rate-Limiting basiert auf Original-Client-IPs. Redirect-URLs verwenden X-Forwarded-Proto für korrekte HTTPS-Generierung.

Trusted Proxy-Konfiguration verhindert Header-Spoofing. Backend-Services akzeptieren Forwarded-Header nur von konfigurierten Proxy-IPs (127.0.0.1, private Netzwerke). Unbekannte Clients können X-Forwarded-For nicht fälschen - Sicherheit durch IP-basierte Vertrauensstellung.

Load Balancing und Connection Pooling optimieren Backend-Kommunikation

Load Balancing verteilt eingehende Requests auf mehrere Backend-Instanzen für erhöhte Ausfallsicherheit und bessere Performance. Round-Robin wechselt zyklisch zwischen verfügbaren Backends. Least-Connections leitet Requests an Backend mit wenigsten aktiven Verbindungen. IP-Hash gewährleistet Session-Persistenz durch Client-IP-basierte Backend-Zuordnung.

Health Checks überwachen Backend-Verfügbarkeit durch regelmäßige Test-Requests. Nicht antwortende Backends werden automatisch aus dem Load Balancing-Pool entfernt bis sie wieder erreichbar sind. Automatisierte Fehlerbehandlung ermöglicht unterbrechungsfreie Service-Updates und Backend-Wartung.

TCP-Verbindungsaufbau zwischen Proxy und Backend erfordert Handshake-Overhead für jeden Request. Connection Pooling hält TCP-Verbindungen zu Backend-Services offen und verwendet sie für mehrere HTTP-Requests wieder. Persistent Connections reduzieren Latenz und CPU-Verbrauch durch Eliminierung wiederholter Verbindungsaufbauten.

Keep-Alive-Parameter definieren Verbindungs-Wiederverwendung: Maximum Requests pro Connection, Idle-Timeout für ungenutzte Verbindungen, Pool-Größe pro Backend. Diese Parameter balancieren Ressourcen-Nutzung gegen Performance-Verbesserung basierend auf Traffic-Mustern.

Caching und Security-Features erweitern Proxy-Funktionalität

Reverse Proxy-Caching speichert Backend-Responses zwischenzeitlich und serviert wiederholte Requests aus dem Cache. Static Assets (CSS, JavaScript, Bilder) werden nach dem ersten Request gecacht und direkt vom Proxy ausgeliefert ohne Backend-Belastung.

Cache-Control-Header definieren Caching-Verhalten: Cache-Control: max-age=3600 erlaubt einstündiges Caching, Cache-Control: no-cache erzwingt Backend-Validierung bei jedem Request. ETag-Header ermöglichen Conditional Requests - Proxy prüft Content-Änderungen ohne vollständige Response-Übertragung.

Security-Features implementieren Defense-in-Depth-Strategien auf Application-Layer. Security-Header wie Strict-Transport-Security erzwingen HTTPS, X-Content-Type-Options verhindern MIME-Type-Sniffing, X-Frame-Options blockieren Clickjacking. Diese Header-Injection schützt Backend-Services ohne individuelle Implementierung.

Rate-Limiting beschränkt Request-Frequenz pro Client-IP oder Session und schützt vor Brute-Force-Angriffen. IP-basierte Zugriffskontrolle filtert Requests basierend auf Quell-Adressen vor Backend-Weiterleitung. Web Application Firewall-Features analysieren HTTP-Requests auf verdächtige Patterns wie SQL-Injection oder Cross-Site-Scripting.

Monitoring und Troubleshooting für Service-Überwachung

Zehn Backend-Services erzeugen zehn separate Log-Dateien in verschiedenen Verzeichnissen. Das erschwert Fehlersuche: War der langsame Request ein Problem von Plausible auf Port 8000 oder Matrix auf Port 8008? Reverse Proxy-Logs zentralisieren diese Informationen - alle Requests laufen durch einen Punkt mit einheitlicher Protokollierung.

Request-Response-Zeit-Messung unterscheidet zwischen Client-zu-Proxy und Proxy-zu-Backend-Latenz. Ein Request zu analytics.example.com dauert plötzlich 5 Sekunden statt 200ms. Die Proxy-Logs zeigen sofort: Liegt das Problem beim SSL-Handshake (Client-zu-Proxy-Latenz hoch) oder beim Backend-Service (Proxy-zu-Backend-Latenz hoch)?

Access-Logs verwenden strukturierte Formate für automatische Analyse: Combined Log Format, JSON-Logs oder Custom-Formats mit Request-IDs für Trace-Korrelation. Diese Logs enthalten vollständige Request-Informationen: Client-IP, Request-URL, Response-Codes, Response-Zeiten, Backend-Server.

Health Check-Monitoring überwacht Backend-Verfügbarkeit kontinuierlich und protokolliert Ausfälle mit Timestamps. Backend-Pool-Status zeigt aktive/inaktive Services für Kapazitäts-Planung. Failover-Events werden geloggt für Post-Incident-Analyse und Service-Level-Agreement-Berichterstattung.


Weiterführende Schritte:

michael von den Drachen

Softwareentwickler seit den 80ern. Systemkritiker seit immer. Betreibt produktive OpenBSD/Debian-Infrastruktur und entwickelt eigenes API-Gateway (furt).
Mehr über michael →
Reverse Proxy: Grundlagen für Service-Konsolidierung
Vorheriger Artikel → Firewall-Prinzipien: Paket-Filterung und Connection-Tracking verstehen