Apache-2.2

在 3 個中,只有一個 mod_jk 工人不工作

  • April 20, 2015

我有一個帶有 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 "%r" %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 "%r" %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 "%r" %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 "%r" %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 中執行的(虛擬)主機。雖然我覺得很奇怪,但這是問題的根本原因。

有人可以幫我配置伺服器以獲得所需的結果。

Apache 無法解析xx3工作人員的主機名。

您可能在/etc/hostsforxx1.com和中有硬編碼條目xx2.com,但在 for 中沒有xx3

您可以通過發出:

$ getent hosts xx2.com

並將其與:

$ getent hosts xx3

請注意

客戶端通常使用主機名來標識他們希望連接的伺服器。此主機名也包含在 HTTP 請求標頭中。Tomcat 從 HTTP 標頭中提取主機名並查找具有匹配名稱的主機。如果未找到匹配項,則將請求路由到預設主機。預設主機的名稱不必與 DNS 名稱匹配(儘管可以),因為任何 DNS 名稱與 Host 元素名稱不匹配的請求都將被路由到預設主機

引用自:https://serverfault.com/questions/683726