Forward-Proxy und Reverse-Proxy: Was ist der Unterschied?

Veröffentlicht:

11 Min. Lesezeit

Acar Diveroli
Autor: Acar Diveroli
Zwei Spuren: ein Computer erreicht über einen Forward-Proxy das Web, das Internet erreicht über einen Reverse-Proxy ein Serverrack

Das Wort „Proxy" wird für zwei verschiedene Aufbauten verwendet, und im Gespräch werden sie ständig verwechselt. Sagt ein Entwickler „Wir haben einen Proxy vor die Website gesetzt", meint er einen Reverse-Proxy. Sagt ein Datenteam „Unsere Anfragen laufen über einen Proxy", meint es einen Forward-Proxy. Beide sind Vermittler zwischen zwei Parteien; der Unterschied liegt darin, in wessen Auftrag sie arbeiten und wer sie einrichtet.

In diesem Artikel beschreiben wir beide Aufbauten einzeln, zeigen Schritt für Schritt, wie eine Anfrage durch jeden von ihnen läuft, und fassen die Unterschiede in einer Tabelle zusammen. Danach behandeln wir, wofür ein Reverse-Proxy eingesetzt wird (Lastverteilung, TLS-Terminierung, Caching), wo CDNs in diesem Bild stehen, und eine kurze Nginx-Konfiguration.

Was ist ein Forward-Proxy?

Ein Forward-Proxy ist der Vermittler, über den ein oder mehrere Clients ins Internet gehen. Der Client kennt die Adresse des Proxys und schickt seine Anfragen dorthin; der Proxy leitet sie mit seiner eigenen IP-Adresse an die Zielseiten weiter. Die Zielseite sieht die Verbindung als vom Proxy kommend.

Im Alltag ist mit „Proxy" fast immer ein Forward-Proxy gemeint. Die Residential-, Datacenter- und Mobile-Proxys, die Proxy-Anbieter verkaufen, sind allesamt Forward-Proxys. Den grundlegenden Ablauf erklären wir ausführlich in Was ist ein Proxy-Server und wie funktioniert er?.

So verläuft eine Anfrage über einen Forward-Proxy:

  1. Der Nutzer trägt die Proxy-Adresse im Browser oder im Code ein.
  2. Der Client verbindet sich nicht mit der Zielseite, sondern mit dem Proxy, und sendet für HTTPS eine CONNECT target.com:443-Anfrage.
  3. Der Proxy authentifiziert den Client bei Bedarf und verbindet sich dann mit seiner eigenen IP-Adresse zur Zielseite.
  4. Die Zielseite protokolliert die Anfrage als von der IP des Proxys kommend und schickt die Antwort an ihn.
  5. Der Proxy gibt die Antwort an den Client zurück.

Über die Befehlszeile ist ein Forward-Proxy eine einzige Option:

bash
curl -x "http://user:pass@pr.proxynet.io:8000" https://httpbin.org/ip

Hier weiß der Client vom Proxy, denn er hat die Adresse selbst angegeben.

Was ist ein Reverse-Proxy?

Ein Reverse-Proxy ist ein Vermittler, der vor einem oder mehreren Servern steht. Verbindet sich ein Besucher mit example.com, verbindet er sich tatsächlich mit dem Reverse-Proxy; dieser leitet die Anfrage an einen der Anwendungsserver dahinter weiter und gibt die Antwort an den Besucher zurück. Der Besucher weiß nicht, welche Maschine geantwortet hat, und muss es auch nicht wissen.

Der HTTP-Standard RFC 9110 nennt diesen Aufbau „Gateway" oder „Reverse Proxy" und beschreibt ihn als Vermittler, der aus Sicht des Clients wie der eigentliche Server auftritt. Für den Client ist der Reverse-Proxy die Website.

So verläuft eine Anfrage über einen Reverse-Proxy:

  1. Der Besucher öffnet example.com; DNS löst den Namen auf die IP-Adresse des Reverse-Proxys auf.
  2. Der Reverse-Proxy nimmt die Verbindung an und entschlüsselt TLS in der Regel an dieser Stelle.
  3. Er wählt anhand von Anfragepfad, Hostname oder aktueller Last einen der Backend-Server aus.
  4. Er leitet die Anfrage an diesen Server weiter und ergänzt die echte IP-Adresse des Besuchers im Header X-Forwarded-For oder Forwarded.
  5. Er nimmt die Antwort des Anwendungsservers entgegen, speichert sie bei Bedarf im Cache und schickt sie an den Besucher.

Was ist der Unterschied zwischen beiden?

Beide Aufbauten nehmen Datenverkehr an einem Ende an und geben ihn am anderen weiter. Den Unterschied sehen Sie am schnellsten, wenn Sie fragen, wessen Interessen der Vermittler dient.

KriteriumForward-ProxyReverse-Proxy
Wen vertritt er?Den ClientDen Server
Wo steht er?Zwischen Client und InternetZwischen Internet und Servern
Wer richtet ihn ein?Nutzer oder NetzwerkadministratorWebsitebetreiber oder Infrastrukturteam
Weiß der Client davon?Ja, der Client trägt die Adresse einNein, der Client glaubt, mit der Website zu sprechen
Wessen IP wird verborgen?Die des ClientsDie der Backend-Server
Wie viele Ziele?Jede Website im InternetBestimmte Server dahinter
TLSTunnelt HTTPS und sieht den Inhalt nichtTerminiert TLS meist selbst
CachingBei unverschlüsseltem HTTP möglichWeit verbreitet
Typische SoftwareSquid, kommerzielle Proxy-DiensteNginx, HAProxy, Envoy, CDNs
Typischer EinsatzZugriffskontrolle, standortbezogener Zugriff, DatenerfassungLastverteilung, Sicherheit, Caching

Die wichtigste Zeile ist die TLS-Zeile. Ein Forward-Proxy öffnet für HTTPS-Verkehr nur einen Tunnel und transportiert verschlüsselte Bytes. Ein Reverse-Proxy besitzt das Zertifikat der Website, entschlüsselt daher den Verkehr, liest die Anfrage und kann sie anhand ihres Inhalts weiterleiten.

Wofür wird ein Reverse-Proxy eingesetzt?

Ein Reverse-Proxy übernimmt Aufgaben, um die sich die Anwendung selbst nicht kümmern soll:

  • Lastverteilung. Er verteilt eingehende Anfragen auf mehrere Anwendungsserver. Antwortet ein Server nicht mehr, lenkt er den Verkehr auf die anderen um, ohne dass Besucher etwas merken.
  • TLS-Terminierung. Zertifikatsverwaltung und Entschlüsselung erfolgen an einer Stelle. Die Backend-Server können im internen Netz unverschlüsseltes HTTP sprechen oder ein separates internes Zertifikat nutzen.
  • Caching und Komprimierung. Er speichert häufig angefragte Seiten und statische Dateien und komprimiert Antworten, sodass weniger Anfragen den Anwendungsserver erreichen.
  • Sicherheitsschicht. Er setzt Regeln einer Web Application Firewall (WAF), Rate-Limits und Bot-Filter um. Die IP-Adressen der Backend-Server sind nicht direkt angreifbar.
  • Pfadbasiertes Routing. Er schickt /api-Anfragen an einen Dienst und /blog-Anfragen an einen anderen, sodass mehrere Anwendungen unter einer Domain laufen.
  • Unterbrechungsfreie Deployments. Eine neue Version auf neuen Servern auszurollen und den Verkehr schrittweise umzuleiten, geschieht über den Reverse-Proxy.

Wie ein Reverse-Proxy mit einer Firewall zusammenarbeitet, erklären wir in Proxy und Firewall im Vergleich.

Wie richten Sie mit Nginx einen einfachen Reverse-Proxy ein?

Die zentrale Direktive für einen Reverse-Proxy in Nginx ist proxy_pass. Die folgende Konfiguration verteilt den Verkehr auf Port 443 auf zwei Anwendungsserver und übergibt die echte IP-Adresse des Besuchers an das Backend:

nginx
upstream app {
    server 10.0.0.11:3000;
    server 10.0.0.12:3000;
}

server {
    listen 443 ssl;
    server_name example.com;
    ssl_certificate     /etc/ssl/example.com/fullchain.pem;
    ssl_certificate_key /etc/ssl/example.com/privkey.pem;

    location / {
        proxy_pass http://app;
        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;
    }
}

Was die Zeilen tun:

  • Der upstream-Block definiert die Backend-Server. Standardmäßig verteilt Nginx Anfragen reihum; Direktiven wie least_conn oder ip_hash ändern das Verfahren.
  • listen 443 ssl und die Zertifikatszeilen terminieren TLS am Reverse-Proxy.
  • proxy_pass leitet die Anfrage an die Gruppe app weiter.
  • Ohne die proxy_set_header-Zeilen sieht die Backend-Anwendung jede Anfrage als von der IP des Reverse-Proxys kommend, wodurch Protokolle und Rate-Limits sinnlos werden.

Die vollständige Liste der Direktiven finden Sie in der ngx_http_proxy_module-Dokumentation von Nginx.

Kann man dem X-Forwarded-For-Header vertrauen?

Eine Anwendung hinter einem Reverse-Proxy liest die IP-Adresse des Besuchers aus dem Header X-Forwarded-For. Dieser Header ist Klartext, und auch der Client kann ihn senden. Vertraut die Anwendung ihm blind, kann ein Besucher eine gefälschte IP-Adresse eintragen und Rate-Limits oder IP-basierte Beschränkungen umgehen.

Der richtige Ansatz:

  • Den Header nur bei Verbindungen berücksichtigen, die von bekannten Reverse-Proxys kommen. In Nginx geschieht das mit den Direktiven set_real_ip_from und real_ip_header.
  • Bei mehreren Vermittlern die Liste von rechts nach links lesen und die Adresse vor dem letzten vertrauenswürdigen Vermittler nehmen.
  • Wo die Infrastruktur es unterstützt, den standardisierten Header Forwarded (RFC 7239) bevorzugen.

Dieselbe Logik gilt auf der Seite des Forward-Proxys: Eine Zielseite kann anhand von Headern, die ein Proxy hinzufügt, den echten Client erkennen. Deshalb fügen die meisten Proxy-Dienste keine Header mit der Client-IP hinzu.

Ist ein CDN ein Reverse-Proxy?

Ja. Ein Content Delivery Network (CDN) besteht aus Reverse-Proxy-Servern an Standorten auf der ganzen Welt. Stellen Sie eine Website hinter ein CDN, löst Ihre Domain auf die IP-Adressen des CDN auf; Besucher verbinden sich mit dem nächstgelegenen CDN-Server, und das CDN leitet Anfragen, die nicht im Cache liegen, an Ihren Server (den Origin) weiter.

Deshalb übernehmen CDNs alle Aufgaben eines Reverse-Proxys in großem Maßstab: TLS-Terminierung, Caching, Abwehr von DDoS-Angriffen, WAF und Bot-Management. Die Rate-Limits und Bot-Prüfseiten, auf die ein Scraper stößt, stammen meist nicht von der Zielseite selbst, sondern von dieser Reverse-Proxy-Schicht davor. Ein Beispiel dafür, wie diese Schicht Bot-Verkehr einordnet, finden Sie in Cloudflare Precursor.

Werden Forward- und Reverse-Proxy gemeinsam genutzt?

Die meisten Anfragen laufen durch beide. Ruft das Skript eines Datenteams Preise von einer E-Commerce-Website ab, sieht der Weg so aus:

  1. Das Skript sendet die Anfrage an den Forward-Proxy des Teams.
  2. Der Forward-Proxy löst die Domain der Website auf und verbindet sich mit dem CDN (Reverse-Proxy) vor der Website.
  3. Das CDN bewertet die Anfrage und leitet sie, sofern sie nicht im Cache liegt, an den Anwendungsserver der Website weiter.
  4. Die Antwort nimmt dieselbe Kette in umgekehrter Richtung zurück zum Skript.

Hier sieht die Website die Ausgangs-IP des Forward-Proxys und das Skript die IP des CDN; keine Seite kennt die echte Maschine hinter der anderen. In Firmennetzwerken ist die Kette noch länger: Mitarbeiterrechner → Firmen-Proxy → Firewall → Internet → CDN der Website → Anwendungsserver.

Anwendungsfälle

  • Datenerfassungsteam: nutzt einen Forward-Proxy, um Preise in verschiedenen Ländern zu sehen und Anfragen zu verteilen. Für diese Aufgabe wird ein Rotierender Proxy eingerichtet, der über eine einzige Adresse bei jeder Verbindung eine andere IP liefert. Skalierung von Crawls beschreibt unsere Seite zur Web-Crawler-Lösung.
  • IT-Team im Unternehmen: nutzt einen Forward-Proxy, um den Verkehr der Mitarbeitenden über einen Ausgang zu leiten und zu protokollieren, und einen Reverse-Proxy, um interne Anwendungen bereitzustellen. Die Datenschutzseite finden Sie auf unserer Seite zur Datensicherheit.
  • Entwickler einer Webanwendung: stellt die Anwendung hinter Nginx oder ein CDN und hält Lastverteilung und TLS aus dem Anwendungscode heraus.
  • Softwaretestteam: nutzt einen Forward-Proxy, um zu sehen, wie sich eine Anwendung aus anderen Ländern öffnet, und einen Reverse-Proxy, um Testdienste unter einer Domain zu bündeln.
  • Einzelne Nutzer: richten einen Forward-Proxy wie einen HTTPS-Proxy ein, um Browserverkehr über einen anderen Standort zu leiten. Ist zusätzlich Verschlüsselung nötig, ist ein VPN das Mittel der Wahl; den Unterschied erklären wir in Proxy und VPN im Vergleich.

Häufige Fehler

  • Einen Reverse-Proxy für ein Anonymisierungswerkzeug halten. Ein Reverse-Proxy schützt den Websitebetreiber; er verbirgt die IP-Adresse des Besuchers nicht, sondern gibt sie mit X-Forwarded-For sogar an das Backend weiter.
  • Den Host-Header nicht weitergeben. Standardmäßig sendet Nginx den Servernamen aus der proxy_pass-Adresse. Arbeitet die Backend-Anwendung mit dem Domainnamen, liefert sie die falsche Website oder eine Fehlerseite.
  • Den Backend-Server direkt erreichbar lassen. Die Sicherheitsregeln des Reverse-Proxys sind wertlos, sobald der Anwendungsserver über seine eigene IP-Adresse erreichbar ist. Der Anwendungsport sollte nur für die interne Adresse des Reverse-Proxys offen sein.
  • Beim Forward-Proxy Identität in Headern mitschicken. Ein selbst betriebener Squid-Proxy kann mit Standardeinstellungen die Header X-Forwarded-For und Via hinzufügen; dann sieht die Zielseite die echte Adresse des Clients.
  • Nicht abgestimmte Timeouts. Ist das Timeout des Reverse-Proxys kürzer als das der Anwendung, werden lange Anfragen mit 504 Gateway Timeout abgebrochen.

Entscheidungshilfe

Ihr BedarfEmpfehlung
Anfragen von einer anderen IP-Adresse sendenForward-Proxy
Inhalte in anderen Ländern sehenForward-Proxy (mit Standortauswahl)
Verkehr der Mitarbeitenden zentral kontrollierenForward-Proxy (Unternehmen)
Die eigene Website auf mehrere Server verteilenReverse-Proxy
TLS-Zertifikate an einer Stelle verwaltenReverse-Proxy
Die eigene Website vor Angriffen und Bot-Verkehr schützenReverse-Proxy oder CDN
Statische Inhalte weltweit schnell ausliefernCDN

Häufig gestellte Fragen

Ist „umgekehrter Proxy" dasselbe wie Reverse-Proxy?

Ja, beides bezeichnet denselben Aufbau. In technischer Dokumentation und in Softwareeinstellungen ist fast immer der englische Begriff „Reverse Proxy" üblich.

Ist ein VPN ein Forward-Proxy?

Funktional ähneln sie sich: Beide leiten Ihren Verkehr über einen anderen Server, und die Zielseite sieht dessen IP-Adresse. Ein VPN arbeitet jedoch auf Betriebssystemebene und verschlüsselt den gesamten Verkehr zwischen Ihrem Gerät und dem VPN-Server. Ein Forward-Proxy wird pro Anwendung eingerichtet und verschlüsselt von sich aus nichts.

Lässt sich Nginx als Forward-Proxy verwenden?

Nginx kann unverschlüsselte HTTP-Anfragen weiterleiten, unterstützt in der Standardversion aber nicht die für HTTPS nötige Methode CONNECT; dafür ist ein Drittanbietermodul erforderlich. Forward-Proxys werden meist mit spezialisierter Software wie Squid aufgebaut.

Macht ein Reverse-Proxy eine Website langsamer?

Theoretisch fügt er eine kleine Verzögerung hinzu, weil es eine Station mehr gibt. In der Praxis laden die meisten Websites hinter einem Reverse-Proxy oder CDN dank Caching, Komprimierung, Wiederverwendung von Verbindungen und Nähe zum Besucher schneller.

Verrät eine Website, dass sie hinter einem Reverse-Proxy steht?

Häufig ja. In den Antwort-Headern erscheinen Server, Via oder CDN-spezifische Header, und die IP-Adresse der Domain gehört einem CDN. Die Adresse des Servers dahinter verrät das jedoch nicht.

Welche Art von Proxy verkaufen Proxy-Dienste?

Residential-, Datacenter-, ISP- und Mobile-Proxy-Dienste sind allesamt Forward-Proxys. Sie erhalten eine Eingangsadresse, und Ihre Anfragen gehen über eine der Ausgangs-IPs des Anbieters ins Netz.

Fazit

Ein Forward-Proxy vertritt den Client, ein Reverse-Proxy den Server. Einen Forward-Proxy richtet der Nutzer bewusst ein, und die Zielseite sieht die IP-Adresse des Proxys; einen Reverse-Proxy richtet der Websitebetreiber ein, und Besucher bekommen die Server dahinter nie zu sehen. Reverse-Proxys übernehmen Lastverteilung, TLS-Terminierung, Caching und Sicherheit, und CDNs sind dieselbe Idee im globalen Maßstab. Wenn Sie Anfragen von verschiedenen IP-Adressen und Standorten senden müssen, suchen Sie einen Forward-Proxy; die Optionen finden Sie in unseren Proxy-Diensten.

ChatGPT fragenClaude fragen