我的 Web 应用程序在 Tomcat 中运行在 http://localhost:8080/example.com/
但它正在从服务于 http://example 的 Apache 反向代理.com/
在端口 80 上。我的 Web 应用程序查看 request.getHeader("x-forwarded-host")
header 以了解它位于反向代理之后。当它(动态地)检测到这一点时,它会构建没有 servlet 路径的 URL。
这对除 JSESSIONID cookie 之外的所有内容都适用。当通过反向代理访问时,它被设置为 /example.com
而不是 /
的路径。当请求中有 x-forwarded-host
header 时,我不知道如何让我的代码告诉 Tomcat 覆盖该 cookie 的路径。
我已经尝试自己从网络应用程序设置 JSESSIONID cookie,但这只会导致两个 Set-Cookie header ,其中只有一个是正确的。
最佳答案
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>
关于tomcat - 如何在反向代理后面正确设置 JSESSIONID cookie 路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9486498/