Настройка файла tomat server.xml с автоматической генерацией mod_jk.conf
Я использую apache (2.2.15)
а также tomcat6 (6.0.24)
на CentOS 6.4
и хотел бы использовать функцию с сервером tomcat, которая автоматически генерирует файл mod_jk.conf, добавив:
<Listener className="org.apache.jk.config.ApacheConfig" workersConfig="/usr/share/tomcat6/conf/jk/workers.properties" modJk="/usr/lib/httpd/modules/mod_jk.so" />
в файле tomcat server.xml непосредственно перед </Engine>
тег. Он прекрасно работает и генерирует файл mod_jk.conf для меня. Вот копия сгенерированного mod_jk.conf:
########## Auto generated on Thu Dec 05 08:32:05 PST 2013##########
<IfModule !mod_jk.c>
LoadModule jk_module "/usr/lib/httpd/modules/mod_jk.so"
</IfModule>
JkWorkersFile "/usr/share/tomcat6/conf/jk/workers.properties"
JkLogFile "/usr/share/tomcat6/logs/mod_jk.log"
JkLogLevel emerg
<VirtualHost localhost>
ServerName localhost
JkMount /CallOffice ajp13
JkMount /CallOffice/* ajp13
JkMount /Diag289 ajp13
JkMount /Diag289/* ajp13
</VirtualHost>
Проблема в том, что мне нужно, чтобы приложения под tomcat были доступны по IP- адресу или DNS-имени, и я не могу получить доступ к моим приложениям под tomcat через apache (http://serverIP/CallOffice/CallOffice.jsp)
, Согласно документации здесь:
http://tomcat.apache.org/connectors-doc/webserver_howto/apache.html
mod_jk.conf может иметь тег VirtualHost, например:
# All URL goes to tomcat except the one containing /home
<VirtualHost *:80>
Для справочной информации следующее в server.xml генерирует <VirtualHost localhost>
тег в mod_jk.conf, когда он генерируется автоматически:
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
В этой конфигурации вы не можете получить доступ к приложениям Tomcat через Apache, если вы не находитесь на сервере, используя localhost. Чтобы получить конфигурацию, которая работает, я должен добавить:
<Host name="*:80" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
в файл tomcat server.xml. Это делает файл mod_jk.conf следующим образом:
########## Auto generated on Thu Dec 05 08:38:52 PST 2013##########
<IfModule !mod_jk.c>
LoadModule jk_module "/usr/lib/httpd/modules/mod_jk.so"
</IfModule>
JkWorkersFile "/usr/share/tomcat6/conf/jk/workers.properties"
JkLogFile "/usr/share/tomcat6/logs/mod_jk.log"
JkLogLevel emerg
<VirtualHost *:80>
ServerName *
JkMount /CallOffice ajp13
JkMount /CallOffice/* ajp13
JkMount /Diag289 ajp13
JkMount /Diag289/* ajp13
</VirtualHost>
<VirtualHost localhost>
ServerName localhost
JkMount /CallOffice ajp13
JkMount /CallOffice/* ajp13
JkMount /Diag289 ajp13
JkMount /Diag289/* ajp13
</VirtualHost>
Эта конфигурация работает, и я могу добраться до своих приложений (http://serverIP/CallOffice/CallOffice.jsp)
но когда я запускаю Tomcat, я получаю следующую ошибку:
Dec 5, 2013 8:38:52 AM org.apache.catalina.core.StandardContext preRegisterJMX
INFO: Error registering ctx with jmx
StandardEngine[Catalina].StandardHost[*:80].StandardContext[/CallOffice] null
javax.management.MalformedObjectNameException: Invalid character ':' in value part of property
javax.management.MalformedObjectNameException: Invalid character ':' in value part of property
Dec 5, 2013 8:38:52 AM org.apache.catalina.core.StandardContext resourcesStart
SEVERE: Error starting static Resources
javax.management.MalformedObjectNameException: Invalid character ':' in value part of property at javax.management.ObjectName.construct(ObjectName.java:617)
Dec 5, 2013 8:38:52 AM org.apache.catalina.core.StandardContext start
SEVERE: Error in resourceStart()
Dec 5, 2013 8:38:52 AM org.apache.catalina.core.StandardContext registerJMX
INFO: Error registering wrapper with jmx
StandardEngine[Catalina].StandardHost[*:80].StandardContext[/CallOffice] null
javax.management.RuntimeOperationsException: Object name cannot be null
javax.management.RuntimeOperationsException: Object name cannot be null`
Tomcat ненавидит видеть любой хост-тег в server.xml
в котором есть "*". Но это необходимо для моего развертывания, где пользователи иногда используют IP-адрес для доступа к приложениям. Я знаю, что могу просто использовать статическую версию mod_jk.conf, чтобы получить то, что мне нужно, но я хотел бы использовать автоматически генерируемый файл mod_jk.conf, потому что новые файлы.war, добавленные в tomcat, будут автоматически конфигурироваться в mod_jk.conf без необходимость обновления статического файла mod_jk.conf.
Любые идеи здесь? Несмотря на то, что я получаю ошибки в лог-файле Tomcat при запуске, мои приложения все еще работают.. Игнорировать ошибки tomcat?? или использовать статический файл mod_jk.conf без виртуального тега или <VirtualHost *:80>
получить то, что я хочу??
1 ответ
Хорошо, вот ваш ответ - используйте статический файл mod_jk.conf.
Архив списка пользователей Tomcat
Разработчики tomcat сочли, что эта функция автоматической генерации ApacheConfig недостаточно хороша для производства, и в tomcat 7 она была удалена. Предположительно проблема была слишком сложной и недостаточно приоритетной.