使用自动生成mod_jk.conf配置tomat的server.xml文件

时间:2013-12-05 16:32:36

标签: linux apache tomcat centos6 mod-jk

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

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

在此配置下,除非您使用localhost在服务器上,否则无法通过apache访问tomcat应用程序。要获得有效的配置,我必须添加:

<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文件,因为添加到tomcat的新的.war文件将在mod_jk.conf自动配置无必须更新静态mod_jk.conf文件。

这里有什么想法?即使我在启动时收到Tomcat日志文件中的错误,我的应用程序仍然有用..Ignore tomcat的错误?或者使用没有虚拟标记的静态mod_jk.conf文件或<VirtualHost *:80>获取我想要的内容?

1 个答案:

答案 0 :(得分:2)

这是你的答案 - 使用静态mod_jk.conf文件。

Tomcat user list archive

tomcat开发人员认为这种ApacheConfig自动生成功能不足以进行生产,而在tomcat 7中,它已被删除。据推测,这个问题太复杂,而且优先级不够高。