一尘不染

如何正确设置反向代理后面的JSESSIONID cookie路径

tomcat

我的Web应用程序在Tomcat上运行,http://localhost:8080/example.com/但正在从http://example.com/端口80上提供服务的Apache反向代理。我的Web应用程序查看request.getHeader("x-forwarded- host")标头以了解它在反向代理后面。当它(动态)检测到此错误时,将构建没有servlet路径的URL。

对于JSESSIONID
cookie之外的所有内容,此方法都适用。它的路径设置为,/example.com而不是/通过反向代理访问时的路径。当x-forwarded- host请求上有标头时,我无法弄清楚我的代码如何告诉Tomcat覆盖该cookie的路径。

我尝试自己从Web应用程序设置JSESSIONID cookie,但这只会导致两个Set-Cookie标头,只有其中一个是正确的。


阅读 834

收藏
2020-06-16

共1个答案

一尘不染

Tomcat6使用Servlet 2.3规范。它不支持通过代码或Tomcat配置更改cookie路径。

我从Apache方面通过一些mod_proxy指令使它工作。该ProxyPassReverseCookiePath指令正是我想要的。它使用错误的路径从Tomcat获取cookie,并将其重写为正确的路径。

<VirtualHost *:*>
    Servername example.com
    ProxyRequests Off
    ProxyPass / http://localhost:8080/example.com/
    ProxyPassReverseCookiePath /example.com /
    ProxyPassReverseCookieDomain localhost example.com
</VirtualHost>
2020-06-16