我通过ajp协议连接到两个tomcat应用程序。 两者都作为ROOT.war在单独的tomcat虚拟主机中运行。 在服务器上,我已配置/ 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>
Tomcat:
我将应用程序部署为: app1 - $ CATALINA_HOME / tcvh1 / ROOT.war app2 - $ CATALINA_HOME / tcvh2 / ROOT.war
现在, 如果我将tomcat更改为在端口8080上运行,并将代理传递更改为连接到http://tcvh1:8080,则可以。但如果我使用AJP的配置,它不起作用。
为什么我的主机别名不适用于AJP?有没有办法让它发挥作用?
答案 0 :(得分:2)
它不起作用,因为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.更快更简单。