Was ist die Verwendung der ProxyPassReverse-Direktive?


8

Definition von apache.org sagt:

Mit dieser Anweisung kann Apache httpd die URL in den Headern Location, Content-Location und URI in HTTP-Umleitungsantworten anpassen. Dies ist wichtig, wenn Apache httpd als Reverse-Proxy (oder Gateway) verwendet wird, um zu vermeiden, dass der Reverse-Proxy aufgrund von HTTP-Weiterleitungen auf den Back-End-Servern, die hinter dem Reverse-Proxy bleiben, umgangen wird.

Nur die oben speziell erwähnten HTTP-Antwortheader werden neu geschrieben. Apache httpd schreibt weder andere Antwortheader noch standardmäßig URL-Verweise in HTML-Seiten neu. Dies bedeutet, dass wenn der Proxy-Inhalt absolute URL-Referenzen enthält, diese den Proxy umgehen. Um HTML-Inhalte so umzuschreiben, dass sie mit dem Proxy übereinstimmen, müssen Sie mod_proxy_html laden und aktivieren.

Pfad ist der Name eines lokalen virtuellen Pfads. URL ist eine Teil-URL für den Remote-Server. Diese Parameter werden wie bei der ProxyPass-Direktive verwendet.

Kann mir bitte jemand erklären, wie es funktioniert. Was macht diese Richtlinie im Allgemeinen?

Antworten:


8

Wenn der Server, der eine Anforderung tatsächlich verarbeitet, eine Umleitung zu einer anderen URL auf diesem Server durchführt, ProxyPassReverseschreibt die Direktive die URL in Bezug auf den Reverse-Proxy-Server neu. Zum Beispiel, wie in der Apache- Dokumentation angegeben , wenn:

 http://reverseproxy.com/mirror/foo/bar

wird gesendet (Reverse Proxy) an

 http://backend.example.com/bar

Für die Verarbeitung wird jedoch auf dem Backend-Server festgelegt, dass die richtige URL angegeben werden sollte quux, dh, dass die Anforderung an umgeleitet werden muss

 http://backend.example.com/quux

Die ProxyPassReverseDirektive schreibt die URL (am Reverse Proxy) in um

 http://reverseproxy.com/mirror/foo/quux

vor dem Weiterleiten der HTTP-Umleitungsantwort an den Client. Auf diese Weise kennt der Client nur den Reverse-Proxy-Server, kann jedoch die erforderliche Anforderung an die richtige URL stellen, http://reverseproxy.com/mirror/foo/quuxdie dann an den Back-End-Server weitergeleitet und wie gewohnt behandelt wird. Kurz gesagt, es ermöglicht dem Reverse-Proxy lediglich, korrekte URI-Header für HTTP-Umleitungsantworten zurückzugeben.


Es ist nicht klar, was does a redirecteigentlich bedeutet. Reagiert es mit einer HTTP-Umleitungsantwort (301/302)?
Chris Stryczynski

Es antwortet mit einem 3xx-Code, da "[3] die 3xx-Klasse (Umleitung) des Statuscodes angibt, dass der Benutzeragent weitere Maßnahmen ergreifen muss, um die Anforderung zu erfüllen." Siehe RFC 7231, in dem die Umleitung erläutert wird . Die ProxyPassReverseDirektive stellt lediglich sicher, dass die 3xx-HTTP-Antwort den korrekten URI in Bezug auf den Reverse-Proxy-Server enthält.
Colt

0

Aus dem Apache 2.4 Reverse Proxy-Handbuch :

Um sicherzustellen, dass und Location: Header, die vom Backend generiert werden, so geändert werden, dass sie auf den Reverse-Proxy verweisen, anstatt auf sich selbst zurückzugreifen, wird am häufigsten die ProxyPassReverse-Direktive benötigt:

ProxyPass "/" " http://www.example.com/ "

ProxyPassReverse "/" " http://www.example.com/ "

Wenn Sie einen Client und zwei Server haben, Proxy und Origin, auf denen Origin die eigentliche Arbeit erledigt (Antwort generieren) und Proxy nur Proxys an Origin anfordert, ist eine gute Serverarchitektur der richtige Zeitpunkt

  1. Origin kennt Proxy nicht
  2. und jede Anfrage geht über Proxy.

Wenn Origin nichts über Proxy weiß, kann es vorkommen, dass Origin dem Client eine HTTP-Umleitung (HTTP 301 oder 302) über Proxy zurückgibt, die direkt auf Origin verweist . Und das ist ein Problem, da der Browser in der nächsten Runde direkt mit Origin Kontakt aufnimmt, was gegen Punkt 2 verstoßen würde.

Wenn die HTTP-Umleitungsantworten an den Proxy zum Client zurückgehen, kann / sollte der Proxy diese Weiterleitungen so ändern, dass der Speicherort weiterhin auf Proxy verweist. Auf diese Weise kann eine eigenständige Anwendung, die unter Origin ausgeführt wird und den Proxy nicht kennt, eine beliebige Umleitungs-URL generieren, solange der Proxy gut konfiguriert ist.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.