2012-05-25 10 views
7

Ich habe eine Webanwendung in einem Tomcat unter http://<server>:8080/app/portal/ ausgeführt. Ich möchte die Welt diese Anwendung über die URL http://<server>/portal/ sehen.Reverse Proxy mit Apache ProxyPass Weiterleitungen anstelle von transparent durch

Um dies zu tun, habe ich einen Reverse Proxy mit Apache 2.2 eingerichtet. Nach der documentation for ProxyPass erwarte ich, dass der Reverse-Proxy alle Anfragen transparent weitergibt. Mein Browser sollte nie etwas über die Tomcat-URL wissen.

Hier ist meine Konfiguration:

keine virtuellen Hosts, habe ich diese Zeilen zu meinem httpd.conf

<Location /portal/> 
    AllowOverride All 
    RewriteEngine On 
    ProxyPass http://server:8080/app/portal/ 
    ProxyPassReverse http://server:8080/app/portal/ 
</Location> 

Wenn ich Firefox verwenden http://<server>/portal/ zu öffnen, ich ein 302 Vorübergehend Verschoben erhalten, und alle Folgeanrufe gehen von meinem Browser direkt zu http://<server>:8080/app/portal/. Mein Browser zeigt auf diese URL.

Dies ist nicht, was ich von einem Reverse Proxy erwartet. Habe ich die Konfiguration falsch gemacht oder habe ich den Zweck von Reverse Proxys missverstanden? Was soll ich tun, um mein gewünschtes Verhalten zu bekommen?

+0

Was ist 'RewriteEngine On' für hier? –

+1

Gute Frage. Ich kopierte das von einer anderen funktionierenden Konfiguration, in der wir tatsächlich umgeschrieben hatten. Ich habe es entfernt und es verhält sich genauso. –

Antwort

5

Ich habe versucht, die Antwort von davidethell Stellung zu nehmen, konnte aber nicht bekommen die Linien richtig formatiert, also hier ist das, was ich herausgefunden habe:

Das Problem war, dass der Reverse-Proxy scheint nur zu arbeite an der URL, auf der der Krieg in meinem Tomcat und NICHT am Servlet im Tomcat installiert ist. Dies führt zu 2 Umschreibungen, von denen einer der Reverse Proxy ist und man alles einfach neu schreibt.

RewriteEngine On 
RewriteRule ^/portal/$ /portal/portal 
RewriteRule ^/portal(.+) http://<server>:8080/app$1 [P] 
+0

Froh, dass es geklappt hat! Es ist schon eine Weile her, seit ich mit Tomcat und Apache ähnliche Reverse-Proxying-Operationen durchgeführt habe. Ich fand den Apache-Anschluss auf lange Sicht sehr viel zuverlässiger. – davidethell

+1

Es scheint, das funktioniert beim Umschreiben von URLs, aber ich stieß auf ein 403 verbotenes Problem. – ThemeZ

1

Haben Sie versucht, anstelle von ProxyPass die Option mod_rewrite Proxy zu verwenden? Etwas wie:

RewriteRule ^$ http://server:8080/app/portal/ [P] 
+0

Danke für den Hinweis. Es war nicht so einfach, aber die richtige Richtung. Sehen Sie meine Antwort unten für Details –

1

Sie haben vergessen, die folgende Option in Ihrer Reverse-Proxy-Konfiguration hinzuzufügen:

ProxyPreserveHost On 

Sie können das gleiche Verhalten mit URL Rewriting erreichen, aber es ist nicht in der Dokumentation zu empfehlen.