2008-10-09 16 views
11

Mein Team versucht, einen Apache Reverse Proxy von der Website eines Kunden in eine unserer Webanwendungen zu implementieren.Apache - Reverse Proxy und HTTP 302 Statusmeldung

http://www.example.com/app1/some-path Karten zu http://internal1.example.com/some-path

In unserer Anwendung, die wir Streben verwenden und umleiten = true Satz auf bestimmte Aktionen, um bestimmte Funktionen bereitzustellen. Die 302 Statusnachrichten von diesen Umleitungen veranlassen den Benutzer, den Proxy zu verlassen, was zu einer Fehlerseite für den Endbenutzer führt.

HTTP/1.1 302 Gefunden Ort: http://internal.example.com/some-path/redirect

Gibt es eine Möglichkeit das Reverse-Proxy in Apache so zu konfigurieren, dass die Umleitungen korrekt funktionieren?

http://www.example.com/app1/some-path/redirect

Antwort

11

Es gibt einen Artikel mit dem Titel Running a Reverse Proxy in Apache, der Ihr Problem zu adressieren scheint. Es verwendet sogar die Beispiele example.com und/app1, die Sie in Ihrem Beispiel haben. Beispiele zur Verwendung von ProxyPassReverse finden Sie im Abschnitt "Konfigurieren des Proxy".

1

Versuchen Sie, die AJP-Konnektor statt Reverse-Proxy verwenden. Sicherlich keine triviale Änderung, aber ich habe festgestellt, dass viele der URL-Albträume verschwinden, wenn AJP anstelle von Reverse-Proxy verwendet wird.

+0

Ich verbrachte 3 Stunden damit, eine zuverlässige Möglichkeit zu finden, HTTP-Weiterleitungen zu verhindern, den HTTPS-Proxy ohne AJP zu übergeben. Ich habe das gelöst, indem ich ajp anstelle von http in ProxyPass und ProxyPassReverse Direktiven verwendet habe. – Gnafu

2

Die AskApache article ist ziemlich hilfreich, aber in der Praxis fand ich eine Kombination von Rewrite Regeln und ProxyPassReverse flexibler zu sein. Also in Ihrem Fall, dass ich so etwas tun würde:

<VirtualHost example> 
     ServerName www.example.com 

     ProxyPassReverse /app1/some-path/ http://internal1.example.com/some-path/ 
     RewriteEngine On 
     RewriteRule /app1/(.*) http://internal1.example.com/some-path$1 [P] 

     ... 
    </VirtualHost> 

Ich mag dieses besser, weil es Ihnen eine feinere Kontrolle über die Pfade gibt Sie Proxying für den internen Server. In unserem Fall wollten wir nur einen Teil der Anwendungen von Drittanbietern herausstellen. Beachten Sie, dass dies keine hartcodierten Links in HTML adressiert, die im AskApache-Artikel behandelt werden.

Beachten Sie auch, dass Sie mehrere Proxypassreverse Linien haben:

ProxyPassReverse/http://internal1.example.com/some-path 
    ProxyPassReverse/http://internal2.example.com/some-path 

Ich erwähne das nur, weil ein anderer Drittanbieter-App wurden wir Proxying wurde Umleitungen aussendet, die nicht ihre internen Host Namen, nur ein anderer Port.

Als letzte Anmerkung, beachten Sie, dass Firebug ist sehr nützlich beim Debuggen der Weiterleitungen.