使用自动生成的mod_jk.confconfigurationtomat的server.xml文件

我在CentOS 6.4上使用apache (2.2.15)tomcat6 (6.0.24) ,并希望通过添加以下内容来自动生成mod_jk.conf文件的tomcat服务器使用该function:

<Listener className="org.apache.jk.config.ApacheConfig" workersConfig="/usr/share/tomcat6/conf/jk/workers.properties" modJk="/usr/lib/httpd/modules/mod_jk.so" />

</Engine>标记之前的tomcat的server.xml文件中。 它工作得很好,并为我生成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名称访问,并且不能通过apache (http://serverIP/CallOffice/CallOffice.jsp)在tomcat下获得我的应用程序。 根据这里的文档:

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中的以下内容在自动生成时会在mod_jk.conf中生成<VirtualHost localhost>标记:

 <Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false"> 

在这个configuration下,你不能通过apache访问tomcat应用程序,除非你在使用localhost的服务器上。 要得到一个有效的configuration,我必须添加:

<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> 

这个configuration工作,我可以到我的应用程序(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文件,因为添加到tomcat的新.war文件将在mod_jk.conf中自动configuration,而不需要必须更新一个静态的mod_jk.conf文件。

这里的任何想法? 即使我在启动时得到Tomcat的日志文件中的错误,我的应用程序仍然工作..忽略tomcat的错误? 或去与一个静态mod_jk.conf文件没有虚拟标签或<VirtualHost *:80>得到我想要的?

Solutions Collecting From Web of "使用自动生成的mod_jk.confconfigurationtomat的server.xml文件"

那么这是你的答案 – 去一个静态的mod_jk.conf文件。

Tomcat用户列表存档

tomcat开发者认为这个ApacheConfig自动生成功能对于生产来说不够好,而在tomcat 7中,它被删除了。 据推测,这个问题太复杂,不够高。