2012-05-25 36 views
7

Obtuve una aplicación web ejecutándose dentro de un Tomcat al http://<server>:8080/app/portal/. Quiero que el mundo vea esta aplicación a través de la URL http://<server>/portal/.Reverse Proxy con Apache ProxyPass redirects en lugar de pasar transparentemente por

Para hacer esto, configuré un Proxy inverso con Apache 2.2. De acuerdo con el documentation for ProxyPass, espero que el proxy inverso pase todas las solicitudes de forma transparente. Mi navegador nunca debe saber sobre la URL de Tomcat.

Aquí está mi configuración:

No hay hosts virtuales, he añadido estas líneas a httpd.conf

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

Cuando utilizo Firefox para abrir http://<server>/portal/, consigo un 302 trasladó temporalmente, y todos las llamadas de seguimiento van directamente de mi navegador al http://<server>:8080/app/portal/. Mi navegador apunta a esta URL.

Esto no es lo que esperaba de un Reverse Proxy. ¿Hice mal la configuración o no entiendo bien el propósito de los Proxy inversa? ¿Qué debo hacer para obtener mi comportamiento deseado?

+0

¿Qué es 'RewriteEngine On' aquí? –

+1

Buena pregunta. Copié eso de otra configuración de trabajo donde realmente teníamos reescrituras. Lo eliminé y se comporta de la misma manera. –

Respuesta

5

Me trataron de comentar la respuesta de davidethell, pero no pudieron obtener las líneas formato correcto, por lo que aquí es lo que descubrí:

El problema era que el proxy inverso parece que sólo trabajar en la URL donde se implementa War en mi Tomcat, y NO en el servlet dentro de Tomcat. Esto lleva a 2 reescrituras, una de ellas es el proxy inverso y otra que reescribe todo detrás de eso.

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

¡Me alegro de que haya funcionado! Ha pasado un tiempo desde que hice un proxy inverso similar con Tomcat y Apache. Descubrí que el conector apache es mucho más confiable a largo plazo. – davidethell

+1

Parece que esto funciona en la reescritura de URL, pero encontré un problema prohibido 403. – ThemeZ

1

¿Has probado usar la opción Proxy mod_rewrite en lugar de ProxyPass? Algo así como:

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

Gracias por la pista. No fue tan simple como eso, sino la dirección correcta. Ver mi respuesta a continuación para más detalles –

1

se le olvidó añadir la siguiente opción en la configuración de proxy inverso:

ProxyPreserveHost On 

Puede lograr el mismo comportamiento con la reescritura de URL, pero no se recomienda en la documentación.

Cuestiones relacionadas