gpt4 book ai didi

apache - 使用 ajp 协议(protocol)连接到备用备用主机别名

转载 作者:行者123 更新时间:2023-11-28 22:14:17 26 4
gpt4 key购买 nike

我正在通过 ajp 协议(protocol)连接到两个 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.warapp2 -- $CATALINA_HOME/tcvh2/ROOT.war

现在,如果我将 tomcat 更改为在端口 8080 上运行,并将代理传递更改为连接到 http://tcvh1:8080 , 然后就可以了。但是如果我将配置与 AJP 一起使用,它不起作用

为什么我的主机别名不适用于 AJP?有没有办法让它发挥作用?

最佳答案

它不起作用,因为 mod_proxy_ajp 总是将 httpd 接收到的主机 header 传递给 Tomcat,而 mod_proxy_http 将使用 ProxyPass 中定义的主机,除非 ProxyPreserveHost 设置为 On。

因为 - 就 httpd 而言 - 您的虚拟主机是 app1.example.com 和 app2.example.com,这些是传递给您的 Tomcat 实例的内容。 Tomcat 没有这些虚拟主机的记录。它有 tcvh1 和 tcvh2。因此,所有请求都将路由到默认虚拟主机(在 server.xml 中的引擎元素上定义的任何一个)。

有几种方法可以解决这个问题:

  1. 重命名您的 Tomcat 虚拟主机以匹配您的 httpd 虚拟主机
  2. 为您的 Tomcat 虚拟主机添加别名(参见 http://tomcat.apache.org/tomcat-7.0-doc/config/host.html#Host_Name_Aliases)。

就我个人而言,我会选择选项 2。更快更简单。

关于apache - 使用 ajp 协议(protocol)连接到备用备用主机别名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10488253/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com