我有一个站点说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
答案 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路径。基本上,这一切都变得一团糟,更值得花时间去解决问题,以完全避免这个问题。