我通过ajp协议连接到两个tomcat应用程序。两者都在单独的tomcat虚拟主机中作为ROOT.war运行。在服务器上,我已经配置了/ etc / hosts文件
127.0.0.1 localhost tcvh1 tcvh2
apache httpd.conf:
Listen 80 NameVirtualHost *:80 <VirtualHost *:80> #ProxyPreserveHost On ServerName app1.example.com ProxyPass / ajp://tcvh1:8082/ ProxyPassReverse / ajp://tcvh1:8082/ </VirtualHost> <VirtualHost *:80> #ProxyPreserveHost On ServerName app2.example.com ProxyPass / ajp://tcvh2:8082/ ProxyPassReverse / ajp://tcvh2:8082/ </VirtualHost>
雄猫
我将应用程序部署为:app1-$ CATALINA_HOME / tcvh1 / ROOT.war app2-$ CATALINA_HOME / tcvh2 / ROOT.war
现在,如果我将tomcat更改为在端口8080上运行,并且更改了代理密码以连接到http:// tcvh1:8080, 则它可以正常工作 。但是,如果我将配置与AJP一起使用, 则它不起作用 。
为什么我的主机别名不能与AJP一起使用?有没有办法使其工作?
它不起作用,因为mod_proxy_ajp始终将httpd接收的主机头传递给Tomcat,而mod_proxy_http将使用ProxyPass中定义的主机,除非ProxyPreserveHost设置为On。
由于-就httpd而言- 您的虚拟主机是app1.example.com和app2.example.com,因此这些都是传递给Tomcat实例的主机。Tomcat没有这些虚拟主机的记录。它具有tcvh1和tcvh2。因此,所有请求都将路由到默认虚拟主机(在server.xml的Engine元素中定义的任何一个)。
有几种方法可以解决此问题:
就个人而言,我会选择选项2。更快,更简单。