一尘不染

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

tomcat

我使用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" />

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

问题是我需要 通过IP或DNS名称访问
tomcat下的应用程序,并且无法通过apache访问tomcat下的应用程序(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">

在这种配置下,除非您使用本地主机在服务器上,否则无法通过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的日志文件中收到错误,我的应用程序仍然可以工作。忽略了Tomcat的错误?或使用没有虚拟标签的静态mod_jk.conf文件或<VirtualHost *:80>获得我想要的东西?


阅读 323

收藏
2020-06-16

共1个答案

一尘不染

好的,这就是您的答案-使用静态的mod_jk.conf文件。

Tomcat用户列表归档

tomcat开发人员认为此ApacheConfig自动生成功能不足以用于生产,因此在tomcat 7中已将其删除。大概这个问题太复杂了,优先级还不够高。

2020-06-16