los atributos de sesión ya no funcionan al pasar por mod_proxy

Tengo una aplicación Tomcat ejecutándose en "http://localhost:8080/appexploded/login.jsp" (Tomcat). Ahora he instalado Apache y estoy ejecutando mod_proxy para que todas las solicitudes en el puerto 80 puedan enviarse al 8080. En mi archivo httpd.conf, esto es lo que tengo:

LoadModule proxy_module  /usr/lib/apache2/modules/mod_proxy.so

ProxyPass         /ordergeek  http://localhost:8080/appexploded
ProxyPassReverse  /ordergeek  http://localhost:8080/appexploded 

Entonces, cuando hago una solicitud directamente al :8080, mi request.getSession().getAttribute("BLAH") funciona de una página a otra. Sin embargo, cuando voy a "http://localhost/ordergeek/login.jsp", esa página establece un atributo de sesión y luego redirige a otra página. Sin embargo, esa página siguiente intenta leer request.getSession().getAttribute("BLAH"), y no lo encuentra.

Cuando no paso por el proxy... los atributos de la sesión funcionan. Cuando paso por el proxy, no lo hacen. ¿Qué me estoy perdiendo?

Agregué lo siguiente a mi server.xml:

<Connector port="8080" 
          proxyName="www.myappurl.com"
          proxyPort="80"/>

preguntado el 05 de junio de 12 a las 07:06

La pregunta se corta después de "server.xml:". ¿Mal marcado? -

¿Puedes observar la respuesta inicial del servidor, específicamente el encabezado Set-Cookie? Sospecho que Tomcat está enviando una cookie con "path=/appexploded", pero las solicitudes a httpd se realizan a /ordergeek para que el cliente no envíe la cookie. -

2 Respuestas

Es antiguo, pero como este hilo aparece en los primeros resultados de búsqueda de Google y como apenas encontré la respuesta en otros lugares, podría ayudar:

Solo tiene que agregar una directiva ProxyPassReverseCookiePath para corregir la ruta en las cookies:

ProxyPassReverseCookiePath /appexploded /ordergeek  

Una vez que esté configurado, debería obtener los atributos de su sesión como de costumbre.

Tenga en cuenta que debe utilizar Apache 2.2 o posterior.

respondido 27 nov., 12:17

Es muy difícil cambiar el nombre de la aplicación web cuando Apache HTTPD está en la ruta. No solo debe usar ProxyPassReverse, sino también traducir todo el HTML saliente para reescribir los enlaces colocados allí por la aplicación. Hay un módulo mod_proxy_html de terceros que hace eso, pero realmente deberías reconsiderar toda la estrategia. En mi humilde opinión, reescribir HTML es parte del problema, no parte de la solución. Simplemente cambie el nombre de su aplicación web internamente en Tomcat.

Respondido el 17 de junio de 12 a las 23:06

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.