Назад | Перейти на главную страницу

Из 3 не работает только один воркер mod_jk

У меня есть конфигурация сервера с Apache http Server 2.2 с виртуальными хостами на основе имени, подключенными к отдельным виртуальным хостам Tomcat 7 с помощью соединителя mod_jk.

Ранее 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 из приложения host-manager приложение не запускается. В то время как xx1.com и xx2.com очень хорошо отзываются.

Примечание. Xx1.com и xx2.com - это общедоступные домены с их записями A, указывающими на сервер, на котором работают приложения, тогда как xx3 - это локальный домен без эксклюзивной записи DNS, кроме записи в файле hosts.

Потратив много времени, я заметил, что параметр worker.host разрешает имя хоста на основе DNS, а не только (виртуальных) хостов, работающих в Tomcat. Хотя мне это кажется очень странным, это основная причина проблемы.

Может ли кто-нибудь помочь мне настроить сервер для достижения желаемого результата.

Apache не может разрешить имя хоста xx3 рабочего.

Вероятно, у вас есть жестко закодированные записи в /etc/hosts для xx1.com и xx2.com, но не для xx3.

Вы можете узнать, выполнив:

$ getent hosts xx2.com

и сравнивая это с:

$ getent hosts xx3

Также Обратите внимание, что:

Клиенты обычно используют имена хостов для идентификации сервера, к которому они хотят подключиться. Это имя хоста также включается в заголовки HTTP-запроса. Tomcat извлекает имя хоста из заголовков HTTP и ищет хост с совпадающим именем. Если совпадений не найдено, запрос направляется на хост по умолчанию. Имя хоста по умолчанию не обязательно должно совпадать с DNS-именем (хотя может), поскольку любой запрос, DNS-имя которого не совпадает с именем элемента Host, будет перенаправлен на хост по умолчанию..