Tomcat 如何在反向代理后正确设置JSESSIONID cookie路径
我的web应用程序正在Tomcat中运行,Tomcat 如何在反向代理后正确设置JSESSIONID cookie路径,tomcat,reverse-proxy,jsessionid,Tomcat,Reverse Proxy,Jsessionid,我的web应用程序正在Tomcat中运行,http://localhost:8080/example.com/但它是从提供服务的Apache反向代理的http://example.com/在端口80上。我的web应用程序查看request.getHeader(“x-forwarded-host”)头,知道它在反向代理后面。当它检测到这一点时(动态地),它会构建URL,而不使用servlet路径 除了JSESSIONID cookie之外,这对任何东西都适用。当通过反向代理访问时,它被设置为路径/
http://localhost:8080/example.com/
但它是从提供服务的Apache反向代理的http://example.com/
在端口80上。我的web应用程序查看request.getHeader(“x-forwarded-host”)
头,知道它在反向代理后面。当它检测到这一点时(动态地),它会构建URL,而不使用servlet路径
除了JSESSIONID cookie之外,这对任何东西都适用。当通过反向代理访问时,它被设置为路径/example.com
,而不是/
。当请求上有x-forwarded-host
头时,我不知道如何让代码告诉Tomcat覆盖该cookie的路径
我自己也尝试过从web应用设置JSESSIONID cookie,但这只会产生两个Set cookie头,其中只有一个是正确的。Tomcat6使用Servlet 2.3规范。它不支持通过代码或Tomcat配置更改cookie路径 我使用一些
mod_proxy
指令从Apache端实现了它。ProxyPassReverseCookiePath
指令正是我想要的。它使用不正确的路径从Tomcat获取cookie,并将其重写为正确的路径
<VirtualHost *:*>
Servername example.com
ProxyRequests Off
ProxyPass / http://localhost:8080/example.com/
ProxyPassReverseCookiePath /example.com /
ProxyPassReverseCookieDomain localhost example.com
</VirtualHost>
Servername example.com
代理请求关闭
ProxyPass/http://localhost:8080/example.com/
ProxyPassReverseCookiePath/example.com/
ProxyPassReverseCokieDomain localhost example.com
或者将节点/Context(文件:/conf/Context.xml)的属性sessionokiepath设置为“/”:
查看:有关更多信息,请参见Servlet规范3.0版介绍的用于控制会话cookie的功能: Tomcat7使用Servlet规范的版本3
<Context sessionCookiePath="/">
SessionCookieConfig scc = getServletContext().getSessionCookieConfig();
scc.setPath("/");
scc.setDomain("example.com");