3 个 mod_jk worker 中只有一个不工作

3 个 mod_jk worker 中只有一个不工作

我有一个带有 Apache http Server 2.2 的服务器配置,其中基于名称的虚拟主机使用 mod_jk 连接器连接到单独的 Tomcat 7 虚拟主机。

以前,2 个 Apache 虚拟主机成功地为来自各自 Tomcat 虚拟主机的单独应用程序提供服务,但最近,当我尝试在配置中添加另一个主机时,新主机无法正常工作。

以下是 Tomcat 的 server.xml 中的主机声明:

<Host name="localhost"  appBase="webapps/localhost"
      unpackWARs="true" autoDeploy="true">          
    <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
           prefix="localhost_access_log." suffix=".txt"
           pattern="%h %l %u %t &quot;%r&quot; %s %b" />
</Host>

<Host name="xx1.com"  appBase="webapps/xx1"
      unpackWARs="true" autoDeploy="true">  
    <Alias>www.xx1.com</Alias>        
    <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
           prefix="xx1_access_log." suffix=".txt"
           pattern="%h %l %u %t &quot;%r&quot; %s %b" />
</Host>

<Host name="xx2.com"  appBase="webapps/xx2"
      unpackWARs="true" autoDeploy="true">
    <Alias>www.xx2.com</Alias>          
    <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
           prefix="xx2_access_log." suffix=".txt"
           pattern="%h %l %u %t &quot;%r&quot; %s %b" />
</Host>

<Host name="xx3"  appBase="webapps/xx3"
      unpackWARs="true" autoDeploy="true">        
    <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
           prefix="xx3_access_log." suffix=".txt"
           pattern="%h %l %u %t &quot;%r&quot; %s %b" />
</Host>

这是 Apache 虚拟主机配置:

<VirtualHost *:80>
ServerName xxx.com
ServerAlias *.xxx.com    
JkMount /* newworker
</VirtualHost>

<VirtualHost *:80>
ServerName xx2.com
ServerAlias *.xx2.com
JkMount /* worker2  
</VirtualHost>

<VirtualHost *:80>
ServerName xx1.com
ServerAlias *.xx1.com    
JkMount /* worker1
</VirtualHost>

Worker.properties文件内容为:

worker.list=worker1, woker2, newworker
worker.worker1.type=ajp13
worker.worker1.host=xx1.com
worker.worker1.port=8009
worker.worker2.type=ajp13
worker.worker2.host=xx2.com
worker.worker2.port=8009
worker.newworker.type=ajp13
worker.newworker.host=xx3
worker.newworker.port=8009

以下是 mod_jk 日志:

[error] ajp_validate::jk_ajp_common.c (2748): worker newworker can't resolve tomcat address xx3

我认为问题出在 Tomcat 上,因为当从主机管理器应用程序访问主机 xx3 时,应用程序无法运行。而 xx1.com 和 xx2.com 响应良好。

注意:xx1.com 和 xx2.com 是公共域,其 A 记录指向运行应用程序的服务器,而 xx3 是本地域,除了 hosts 文件中的条目外,没有独有的 DNS 记录。

经过大量时间的思考,我发现 worker.host 参数是基于 DNS 来解析主机名,而不仅仅是 Tomcat 中运行的(虚拟)主机。虽然我觉得很奇怪,但这正是问题的根源。

有人可以帮助我配置服务器以获得所需的结果吗?

答案1

Apache 无法解析xx3工作进程的主机名。

/etc/hosts您可能在xx1.com和中有硬编码条目xx2.com,但没有在 中有硬编码条目xx3

您可以通过以下方式找到答案:

$ getent hosts xx2.com

并将其与以下项进行比较:

$ getent hosts xx3

注意

客户端通常使用主机名来识别他们想要连接的服务器。此主机名也包含在 HTTP 请求标头中。Tomcat 从 HTTP 标头中提取主机名并查找具有匹配名称的主机。如果未找到匹配项,则请求将路由到默认主机。默认主机的名称不必与 DNS 名称匹配(尽管可以),因为任何 DNS 名称与 Host 元素名称不匹配的请求都将被路由到默认主机

相关内容