首先,我在 Windows 上运行我的罪行。
我有两个在两个不同端口上运行的同一 Web 应用程序的 tomcat 实例,我可以直接访问它们
http://localhost:7070/foo/
,http://localhost:8080/foo/
我希望能够访问以下 URL
http://localhost/foo1/
:http://localhost/foo2/
如果我对某个站点进行了以下简单设置,那么一切就都很好,我可以做到http://localhost/foo/
:
ProxyRequests off
ProxyPreserveHost off
RewriteEngine On
<VirtualHost *:80> ]
ProxyPass /foo/ http://localhost:7070/foo/
ProxyPassReverse /foo/ http://localhost:7070/foo/
</VirtualHost>
对引用“foo1”的配置进行以下更改:
ProxyRequests off
ProxyPreserveHost off
RewriteEngine On
<VirtualHost *:80> ]
ProxyPass /foo1/ http://localhost:7070/foo/
ProxyPassReverse /foo1/ http://localhost:7070/foo/
</VirtualHost>
似乎发生了两件奇怪的事情:
然后我可以进入
http://localhost/foo1/
并登录 OK 并进入默认页面,但奇怪的是 sessionid 在 URL 中并且我无法进入 Web 应用程序中的其他页面。当我查看 tomcat 管理器页面时,经过几次登录尝试后,我会看到大量活动会话,而不仅仅是每个用户一个。
如果我直接登录到 tomcat 网页,http://localhost:7070/foo/
则没有可见的 sessionid,但一切仍然有效。
请问您对我的配置应该如何设置有什么想法吗?
答案1
查看 ProxyPassReverseCookieDomain 和 ProxyPassReverseCookiePath 指令http://httpd.apache.org/docs/2.4/mod/mod_proxy.html#proxypass
我敢打赌你的应用程序正在设置 cookie,并且由于你的配置中没有 cookie 重写,所以它只能在 url 中使用 jsessionid。