2012-02-28 22 views
23

Mi aplicación web se ejecuta en Tomcat en http://localhost:8080/example.com/ pero está siendo proxy inverso de Apache que está publicando http://example.com/ en el puerto 80. Mi aplicación web mira el encabezado request.getHeader("x-forwarded-host") para saber que está detrás de un proxy inverso. Cuando detecta esto (dinámicamente) construye URLs sin la ruta del servlet en ellas.Cómo establecer correctamente la ruta de la cookie JSESSIONID detrás del proxy inverso

Esto funciona bien para todo excepto para la cookie JSESSIONID. Se establece con una ruta de /example.com en lugar de / cuando se accede a través del proxy inverso. No puedo entender cómo puedo hacer que mi código le indique a Tomcat que anule la ruta de esa cookie cuando hay un encabezado x-forwarded-host en la solicitud.

He intentado configurar la cookie JSESSIONID desde la aplicación web, pero eso solo da como resultado dos encabezados Set-Cookie, solo uno de los cuales es correcto.

Respuesta

30

Tomcat6 utiliza la especificación Servlet 2.3. No es compatible con cambiar la ruta de la cookie a través del código o la configuración de Tomcat.

Lo tengo que trabajar desde el lado Apache con algunas directivas mod_proxy. La directiva ProxyPassReverseCookiePath hace exactamente lo que yo quiero. Toma la cookie de Tomcat con la ruta incorrecta y la reescribe en la ruta correcta.

<VirtualHost *:*> 
    Servername example.com 
    ProxyRequests Off 
    ProxyPass/http://localhost:8080/example.com/ 
    ProxyPassReverseCookiePath /example.com/
    ProxyPassReverseCookieDomain localhost example.com 
</VirtualHost> 
Cuestiones relacionadas