У меня есть конфигурация сервера с 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 "%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 из приложения 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, будет перенаправлен на хост по умолчанию..