如何在使用apache mod_proxy时保持不同的会话

时间:2013-12-18 07:58:15

标签: apache tomcat

我有一个站点说www.example.com,我使用apache mod_proxy将另一个子域sub.example.com映射到网址www.example.com/sub,但同时我需要保留www.example.com和www.example.com/sub上的不同会议。可能吗? 我正在使用proxypass和proxypassreverese来实现这一目标。

    ProxyPass /sub http://sub.example.com
    ProxyPassReverse /sub http://sub.example.com

1 个答案:

答案 0 :(得分:0)

如果您有http://sub.example.com/http://www.example.com/sub,则Cookie本身不应该发生冲突:Tomcat会发出JSESSIONID Cookie,浏览器应将该Cookie与当时正在使用的主机绑定(www.example.com或sub.example.com)。

上面的配置似乎表明您总是使用www.example.com并且只在幕后重新命名主机。

您可能遇到此问题,因为Tomcat将分配一个JSESSIONID cookie,其Path与Tomcat看到的上下文路径匹配(即/,因为您似乎正在使用Tomcat上的ROOT Web应用程序),客户端将始终看到相同的主机名。结果将是两个JSESSIONID cookie,如果用户访问了两个“应用程序”并从每个“应用程序”收到了cookie,则每个请求都会传递给http://www.example.com/。 Tomcat将忽略与现有会话不匹配的任何JSESSIONID cookie,然后有多个cookie可供选择,但如果有多个有效的JSESSIONID cookie,则它可能对环境因素敏感,例如标题排序。

最佳策略是避免使用身份验证和/或Cookie的Web应用程序重叠URL空间。也许在/sub上部署一个Web应用程序,在/top上部署另一个Web应用程序。对于完全不使用任何cookie的页面,请使用顶级(例如,除了资源名称之外没有其他路径,如index.html)。

如果您真的想干涉事情,可以查看使用网络应用程序sessionCookiePath文件中<Context>元素的WEB-INF/context.xml。对于部署在/sub上的Web应用程序,您可以将其设置为/sub。这可能会有所帮助,但是您仍然需要单独部署(您的副本)Web应用程序,以便为www.example.com部署的应用程序提供不同的cookie路径。基本上,这一切都变得一团糟,更值得花时间去解决问题,以完全避免这个问题。