6.8. Reverse Proxy - mod_proxy
Ein WWW-Proxy kann in zwei Richtungen arbeiten:

  • als "forward proxy", d.h ein Stellvertreter, an den der Browser seine Anfrage stellt und der dann die Daten aus dem Internet holt.
  • als "reverse proxy" oder "accelerator", der auf Serverseite die Anfragen aus dem Internet annimmt und die Daten aus einer Server-Farm zusammensammelt.

Ein Proxy kann auch mit einem Cache kombiniert werden, so dass Ressourcen gespart werden können.

Während es für "forward proxies" als WWW-Proxy-Cache-Server auch dedizierte und optimierte Software-Pakete gibt (z.B. der Squid) ist die integrierte Möglichkeit, des Reverse- Proxy, der in ein Internet-Angebot auch Daten von anderen Backend-Systemen integriert sehr interessant. So kann ein Angebot einfach "one face to the customer" bieten und Ressourcen optimieren.

Wichtig ist beim Mod-Proxy aber immer, dass man auf die Zugriffsbeschränkungen achtet. Ein Missbrauch kann neben Ressourcenverschwendung auch rechtliche Probleme erzeugen. Die Direktive für den Proxy sind in einen "<Proxy>"-Container zusammengefasst. Ein Beispiel:

     <Proxy *>
          Order Deny,Allow
          Deny from all
          Allow from 192.168.0
     </Proxy>

Für einen Reverse-Proxy müssen die Zugriffsbeschränkungen im Directory-Container eingestellt werden.

Die wichtigsten Direktiven für den Reverse-Proxy sind ProxyPass und ProxyPassReverse. Beide leiten nicht nur Anfragen weiter, sondern passen auch die Location, Content-Location und URI-Headers an. Dies ist insbesondere wichtig, da die Backend-Systeme auch Redirects und eigene Links erzeugen können. Beide Direktiven erwarten zwei Argumente: den virtuellen Pfad und den realen Pfad.

Ein Beispiel für das offizielle Angebot "example.com", das einen Teil seiner Daten vom Server backend.example.com holt:

     ProxyPass              /mirror/foo/         http://backend.example.com/
     ProxyPassReverse  /mirror/foo/         http://backend.example.com/

Diese beiden Regeln wandeln alle Anfragen an http://example.com/mirror/foo/bar in einen Proxy-Request an http://backend.example.com/bar um (ProxyPass). Wenn aber z.B. eine Anfrage an http://backend.example.com/bar an http://backend.example.com/quux weitergeleitet wird, schreibt der Apache dies in einen Redirect auf http://example.com/mirror/foo/quux um (UseCanonicalName, ProxyPassReverse).

Wenn diese Anweisungen in einem Location-Container eingesetzt wird, entfällt das erste Argument und wird aus dem Location-Tag bestimmt.