2008-10-09 26 views
11

Mi equipo está intentando configurar un proxy inverso de Apache desde el sitio de un cliente en una de nuestras aplicaciones web.Apache: proxy inverso y mensaje de estado de HTTP 302

http://www.example.com/app1/some-path mapas a http://internal1.example.com/some-path

Dentro de nuestra aplicación que utilice puntales y tienen redirigir = true conjunto de ciertas acciones con el fin de proporcionar cierta funcionalidad. Los mensajes de estado 302 de estos redireccionamientos provocan que el usuario salga del proxy, lo que da como resultado una página de error para el usuario final.

HTTP/1.1 302 Encontrado Ubicación: http://internal.example.com/some-path/redirect

¿Hay alguna manera de configurar el proxy inverso en Apache para que los redireccionamientos funcionan correctamente?

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

Respuesta

11

Hay un artículo titulado Running a Reverse Proxy in Apache que parece resolver su problema. Incluso utiliza el mismo example.com y/app1 que tiene en su ejemplo. Vaya a la sección "Configurando el Proxy" para ejemplos sobre cómo usar ProxyPassReverse.

1

Trate de usar el conector AJP en lugar de proxy inverso. Ciertamente, no es un cambio trivial, pero he descubierto que muchas de las pesadillas de URL desaparecen cuando se utiliza AJP en lugar de un proxy inverso.

+0

Pasé 3 horas tratando de encontrar una manera confiable de evitar que las redirecciones HTTP pasen el proxy https sin AJP. Terminé resolviendo esto usando ajp en lugar de http en las directivas ProxyPass y ProxyPassReverse. – Gnafu

2

El AskApache article es bastante útil, pero en la práctica encontré una combinación de reglas Rewrite y ProxyPassReverse para ser más flexible. Por lo que en su caso lo haría algo como esto:

<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> 

me gusta esto mejor porque le da un control más preciso sobre los caminos que actúe como apoderado para el servidor interno. En nuestro caso, queríamos exponer solo una parte de la aplicación de terceros. Tenga en cuenta que esto no aborda los enlaces codificados en HTML, que cubre el artículo de AskApache.

Además, cabe destacar que se pueden tener varias líneas ProxyPassReverse:

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

Sólo menciono esto porque otra aplicación de terceros que estábamos de proxies fue el envío de redirecciones que no incluyeron su nombre de host interno, justo un puerto diferente.

Como nota final, tenga en cuenta que Firebug es extremadamente útil al depurar los redireccionamientos.