tomcat - robin - proxy pass reverse apache
Cómo establecer correctamente la ruta de la cookie JSESSIONID detrás del proxy inverso (3)
Mi aplicación web se ejecuta en Tomcat en http://localhost:8080/example.com/
pero está siendo proxy inverso desde Apache que está publicando http://example.com/
en el puerto 80. Mi aplicación web mira el request.getHeader("x-forwarded-host")
encabezado para saber que está detrás de un proxy inverso. Cuando detecta esto (dinámicamente) construye URLs sin la ruta del servlet en ellas.
Esto funciona bien para todo excepto para la cookie JSESSIONID. Se establece con una ruta de /example.com
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.
Intenté configurar la cookie JSESSIONID desde la aplicación web, pero eso solo da como resultado dos encabezados Set-Cookie, de los cuales solo uno es correcto.
De forma alternativa, establezca el atributo sessionCookiePath del nodo / Context (file: /conf/context.xml) en "/":
<Context sessionCookiePath="/">
Eche un vistazo a: http://tomcat.apache.org/tomcat-7.0-doc/config/context.html para más información
La versión 3.0 de la especificación de Servlet presentó la funcionalidad para controlar la cookie de sesión: http://docs.oracle.com/javaee/6/api/javax/servlet/ServletContext.html#getSessionCookieConfig()
SessionCookieConfig scc = getServletContext().getSessionCookieConfig();
scc.setPath("/");
scc.setDomain("example.com");
Tomcat 7 usa la versión 3 de la especificación de Servlet.
Tomcat6 usa la especificación de 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 hice para 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>