Tomcat cookies 无法通过我的 ProxyPass VirtualHost 工作

Tomcat cookies 无法通过我的 ProxyPass VirtualHost 工作

当使用 ProxyPass 将端口 80 上的流量重定向到通过 Tomcat 托管的 Web 应用程序时,我在使 cookie 正常工作方面遇到了一些问题。

我启用 cookie 的动机是为了摆脱附加到 URL 的“jsessionid=”参数。

我在 META-INF/ 中的 context.xml 中为我的 Web 应用程序启用了 cookie。
当我通过以下方式访问 Web 应用程序时http://网址:8080/webapp它按预期工作,jsessionid 参数在 URL 中不可见,而是存储在 cookie 中。

当通过 apache2 虚拟主机访问我的网站时,cookie 似乎不起作用,因为现在“jsessionid”被附加到 URL 中。我该如何解决这个问题?

这是我的 VHost 配置:

<虚拟主机 *:80>
        服务器名称somedomain.no
        服务器别名 www.somedomain.no

        <代理 *>
                命令拒绝、允许
                允许所有人
        </代理>

        ProxyPreserveHost 关闭
        ProxyPass / http://localhost:8080/webapp/
        ProxyPassReverse / http://localhost:8080/webapp/

        错误日志 /var/log/apache2/somedomain.no.error.log
        CustomLog /var/log/apache2/somedomain.no.access.log 合并
</虚拟主机>

编辑:当我访问时,cookie 实际上是被设置的http://somedomain.no,但该 cookie 的路径设置为“/webapp”。

答案1

我想到了。

将其添加到 VHost 配置:

ProxyPassReverseCookiePath /webapp/

答案2

重新映射 URL 是导致应用程序中出现最多问题的因素,因为在许多地方路径不一致。最好避免这样做,并让访问者直接访问您的页面。例如,您可以编写一条重定向规则,规定当访问者点击“/”时,他将被重定向到“/webapp/”,这样他就会使用真实路径,而不是重新映射的路径。

使用重新映射时,您总会遇到类似这样的问题。有时您会想知道为什么会得到损坏的图像,并且会在应用程序生成的重定向中发现“/webapp/img/...”。在其他时候,您会发现您的应用程序知道其路径并自行生成 /webapp 位置,从而导致访问者浏览器上的 /webapp/webapp 等......这些可怕的问题在使用 URL 重新映射的地方导致至少一半的管理员工作,因此您应该在为时已晚之前考虑替代方案。

相关内容