在 3 個中,只有一個 mod_jk 工人不工作
我有一個帶有 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/hosts
forxx1.com
和中有硬編碼條目xx2.com
,但在 for 中沒有xx3
。您可以通過發出:
$ getent hosts xx2.com
並將其與:
$ getent hosts xx3
另請注意:
客戶端通常使用主機名來標識他們希望連接的伺服器。此主機名也包含在 HTTP 請求標頭中。Tomcat 從 HTTP 標頭中提取主機名並查找具有匹配名稱的主機。如果未找到匹配項,則將請求路由到預設主機。預設主機的名稱不必與 DNS 名稱匹配(儘管可以),因為任何 DNS 名稱與 Host 元素名稱不匹配的請求都將被路由到預設主機。