Из 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 "%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. Хотя я нахожу это очень странным, это коренная причина проблемы.
Может кто-нибудь помочь мне настроить сервер для желаемого результата.
1 ответ
Apache не может разрешить имя хоста xx3
рабочего.
У вас, вероятно, есть жестко запрограммированные записи в /etc/hosts
за xx1.com
а также xx2.com
, но не для xx3
,
Вы можете узнать, выпустив:
$ getent hosts xx2.com
и сравнивая это с:
$ getent hosts xx3
Также обратите внимание, что:
Клиенты обычно используют имена хостов для идентификации сервера, к которому они хотят подключиться. Это имя хоста также включено в заголовки HTTP-запроса. Tomcat извлекает имя хоста из заголовков HTTP и ищет хост с соответствующим именем. Если совпадений не найдено, запрос направляется на хост по умолчанию. Имя хоста по умолчанию не обязательно должно соответствовать DNS-имени (хотя оно может), поскольку любой запрос, в котором DNS-имя не совпадает с именем элемента Host, будет направляться на хост по умолчанию.