# Reverse Proxy

Ein Reverse-Proxy ist ein Proxy in einem Rechnernetz, der Ressourcen für einen externen Client von einem oder mehreren internen Servern holt. Die Umsetzung der Adresse ist atypisch und der Richtung des Aufrufes entgegengesetzt (deutsch „umgekehrter Proxy“). Die wahre Adresse des internen Zielsystems bleibt dem externen Client verborgen. Das unterscheidet ihn vom typischen (Forward-)Proxy, der mehreren Clients eines internen (in sich abgeschlossenen) Netzes den Zugriff auf ein externes Netz gewährt.

## Weiterleitungsmodul einer Firewall

Die Reverse-Proxys einer Firewall bieten zunächst die gleiche Funktionalität wie Portweiterleitung und ermöglichen so einen von außen initiierten Verbindungsaufbau zu einem hinter der Weiterleitung liegenden Server des internen Netzes. Sobald sie als Dedicated Proxy arbeiten, verstehen sie das Netzwerkprotokoll und sind dann zudem in der Lage, die Daten der Netzwerkpakete zu analysieren und zu bearbeiten. So können sie z. B. einen Virenscan vornehmen oder Regeln anwenden, die sich auf die Paketinhalte beziehen.
Demgegenüber gibt es auch Reverse-Proxys, die nicht Bestandteil der Firewallsoftware sind und dennoch den Zweck haben, den Zugriff aus dem externen Netz heraus auf einen internen Rechner zu ermöglichen, ohne jedoch die Firewall entsprechend manuell konfigurieren zu müssen. Dazu baut der interne Rechner zunächst eine Verbindung zu einem bestimmten externen Rechner auf, wodurch der externe Rechner über die Firewall hinweg mit dem internen Rechner kommunizieren kann. Läuft auf dem externen Rechner ein Reverse-Proxy, so können nun auch beliebige andere Rechner aus dem externen Netz auf den internen Rechner hinter der Firewall zugreifen, indem sie ihre Anfragen an den Reverse-Proxy des externen Rechners schicken (der Reverse-Proxy leitet die Anfragen an den internen Rechner weiter).

## Performance-Optimierung

Eine gänzlich andere Aufgabe kann ein Reverse-Proxy erfüllen, der die Anfragen für einen Dienst entgegennimmt, um die Geschwindigkeit bzw. Zugriffsrate auf den Dienst zu verbessern oder funktionell zu erweitern. Er kann lokal auf dem Zielsystem installiert sein, oder auf einer separaten Hardware laufen, und arbeitet beispielsweise als HTTP-Accelerator, auch Surrogate Proxy genannt. Verbindungen aus dem Internet an einen Webserver werden durch den Proxy bearbeitet, der die Anfragen selbst beantwortet, sofern sie in dem eigenen Cache stehen, oder andernfalls an die nachgeordneten Dienste oder an einen entfernten Server weiterleitet.

## Weitere Einsatzszenarien

Es gibt mehrere Gründe für den Einsatz eines Reverse-Proxys:

### Netzwerksicherheit

    Der Reverse-Proxy stellt ein weiteres Glied in der Sicherheitskette dar und trägt so zur Sicherheit der Webserver bei, denn es ist möglich, auf einem Reverse-Proxy Virenscanner, Firewalls oder Paketfilter zu installieren.

### Single Sign-on (SSO)

    Der Reverse-Proxy kann die Benutzer-Authentifizierung für mehrere Webserver übernehmen. Dadurch muss sich der Benutzer nur einmal anmelden, um die Dienste mehrerer Server zu nutzen.

### Verschlüsselung/SSL-Beschleunigung

    Wenn sichere Webseiten erzeugt werden, wird die SSL-Verschlüsselung gelegentlich nicht vom Webserver selbst erledigt, sondern durch einen Reverse-Proxy, der mit einer entsprechenden Beschleunigungshardware ausgestattet ist. Somit ist es zudem möglich, ein (SSL-)Zertifikat auf dem Proxy einzusetzen (anstelle auf einem dahinterliegenden Webserver). Bei Squid (ab Version 2.6) geht dies auch per Software. Durch das Verlagern der Verschlüsselung auf den Proxy erzielt man folgende Vorteile:
   * Der Webserver wird durch die Auslagerung der Verschlüsselung (u. U. erheblich) entlastet.
   * Der Proxy kann die Webinhalte cachen, was sonst nicht möglich wäre und eine weitere Entlastung des Webservers bedeutet.
   * ACLs können auch auf verschlüsselten Seiten angewendet werden, da der Proxy die Header im Klartext sieht.

### Lastverteilung (en: loadbalancing)

    Der Reverse-Proxy kann die Last auf mehrere Server verteilen, wobei jeder Server sein Anwendungsfeld bedient. Auch einzelne Server-Ausfälle können hiermit abgefangen werden. Bei Webservern muss der Reverse-Proxy gegebenenfalls die URLs in jeder Webseite umschreiben (Übersetzung der extern bekannten URLs auf die internen Standorte)

### Cachen von Inhalten

    Ein Reverse-Proxy kann die Webserver entlasten, indem er statische Inhalte wie etwa Bilder sowie die Ergebnisse häufig aufgerufener dynamisch erstellter Seiten (aus Skriptsprachen) zwischenspeichert. Auf diese Weise kann eine deutlich höhere Anzahl an Webseitenanfragen bewältigt werden.
Bei Ausfall des dahinterliegenden Webservers (oder im Fehlerfall: beispielsweise HTTP 500) kann zudem eine „benutzerfreundliche“ Meldung angezeigt werden.
Weiterhin kann ein Reverse-Proxy auch als offener Proxy genutzt werden, um Anfragen unter „seinem Namen“ an fremde Server zu schicken, ohne dass dies vom Betreiber so gedacht ist. Daher kann es empfehlenswert sein, ihn derart zu konfigurieren, dass er nur auf Anfragen an bestimmte Server antwortet. Als Beispiel geschieht dies bei Squid durch eine Regel http_access allow mit der abschließenden Regel http_access deny all.