Я использую 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>
, чтобы получить то, что я хочу??