настройка файла server.xml tomat с автоматическим созданием 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>, чтобы получить то, что я хочу??


person GoinOff    schedule 05.12.2013    source источник
comment
Разочарован, чтобы не увидеть никаких ответов на этот вопрос! Я делаю это в Debian прямо сейчас, поэтому я посмотрю, смогу ли я найти что-нибудь полезное, и отчитаюсь. Я нашел документ tomcat.apache.org, мягко говоря, запутанным, и я полагаю, что он тоже устарел.   -  person Adam    schedule 12.02.2014
comment
@Adam Адам, мне пока пришлось использовать статический файл mod_jk.conf. Надеюсь, вы сможете найти решение. Я тоже не доверяю этим документам Apache, они обычно сильно устарели.   -  person GoinOff    schedule 12.02.2014


Ответы (1)


Ну вот ваш ответ - используйте статический файл mod_jk.conf.

Архив списка пользователей Tomcat

Разработчики Tomcat посчитали, что эта функция автоматического создания ApacheConfig недостаточно хороша для производства, и в Tomcat 7 она была удалена. Предположительно проблема была слишком сложной и недостаточно приоритетной.

person Adam    schedule 13.02.2014
comment
Хорошо нашел Адама. Это прекрасно объясняет. Надеюсь, другим не придется тратить на это столько времени, как нам... - person GoinOff; 13.02.2014