Настройка файла 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 она была удалена. Предположительно проблема была слишком сложной и недостаточно приоритетной.

Другие вопросы по тегам