我在同一台机器上安装了一台apache 服务器 和一台tomcat 7 服务器。 apache 服务器被使用并配置为启用虚拟主机,因为它应该为多个 php 网站提供服务。 但是,我们也需要为一些 tomcat 应用程序提供服务,因此我们需要配置 ajp 连接器。
一切顺利,我已经成功配置了多个为 tomcat 应用程序提供服务的 apache 虚拟主机,但我只有一个问题:
通过apache 虚拟主机访问java 应用程序时不维护 session 变量。这在直接连接到 tomcat 服务器的 8080 端口时非常有效。
我可以在 tomcat 管理器中看到每个应用程序的 session 数随着每次从 apache 虚拟主机刷新页面而增加。
java应用部署在tomcat的/webapps/testapp文件夹下。
tomcat 服务器 xml 有一个 ajp 连接器,描述为:
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443"
maxThreads="300" minSpareThreads="10" enableLookups="false"
tcpNoDelay="true" tomcatAuthentication="false" URIEncoding="UTF-8" />
apache 网络服务器包含虚拟主机:
<VirtualHost *:80>
ServerName testapp.com
ServerAlias *.testapp.com
ProxyPreserveHost on
ProxyRequests off
ProxyPass / ajp://localhost:8009/testapp/
ProxyPassReverse / ajp://localhost:8009/testapp/
</VirtualHost>
所以 Apache 代理与 tomcat 工作正常。问题是 jsp session 不通过代理工作。我怎样才能让它发挥作用?是我的配置有问题吗?
最佳答案
所以解决方案是为 apache VHost 添加另一个指令:
ProxyPassReverseCookiePath /testapp /
这样 cookie 的 header 就不会被损坏,tomcat 会看到 session 正常。
关于Apache 2.2 虚拟主机 + Tomcat 7 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14590686/