我的Web应用程序在Tomcat上运行,http://localhost:8080/example.com/但正在从http://example.com/端口80上提供服务的Apache反向代理。我的Web应用程序查看request.getHeader("x-forwarded- host")标头以了解它在反向代理后面。当它(动态)检测到此错误时,将构建没有servlet路径的URL。
http://localhost:8080/example.com/
http://example.com/
request.getHeader("x-forwarded- host")
对于JSESSIONID cookie之外的所有内容,此方法都适用。它的路径设置为,/example.com而不是/通过反向代理访问时的路径。当x-forwarded- host请求上有标头时,我无法弄清楚我的代码如何告诉Tomcat覆盖该cookie的路径。
/example.com
/
x-forwarded- host
我尝试自己从Web应用程序设置JSESSIONID cookie,但这只会导致两个Set-Cookie标头,只有其中一个是正确的。
Tomcat6使用Servlet 2.3规范。它不支持通过代码或Tomcat配置更改cookie路径。
我从Apache方面通过一些mod_proxy指令使它工作。该ProxyPassReverseCookiePath指令正是我想要的。它使用错误的路径从Tomcat获取cookie,并将其重写为正确的路径。
mod_proxy
ProxyPassReverseCookiePath
<VirtualHost *:*> Servername example.com ProxyRequests Off ProxyPass / http://localhost:8080/example.com/ ProxyPassReverseCookiePath /example.com / ProxyPassReverseCookieDomain localhost example.com </VirtualHost>