【发布时间】:2013-12-22 17:09:53
【问题描述】:
我在CentOS 6.4 上使用apache (2.2.15) 和tomcat6 (6.0.24),并希望通过添加自动生成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">
在此配置下,您无法通过 apache 访问 tomcat 应用程序,除非您在使用 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 文件,因为添加到 tomcat 的新 .war 文件将在 mod_jk.conf 中自动配置,而无需必须更新静态 mod_jk.conf 文件。
这里有什么想法吗?即使我在启动时在 Tomcat 的日志文件中出现错误,我的应用程序仍然可以工作..忽略 tomcat 的错误?或者使用没有虚拟标签或<VirtualHost *:80> 的静态 mod_jk.conf 文件来获得我想要的东西??
【问题讨论】:
-
很失望没有看到关于这个的任何答案!我现在正在 Debian 上做这个,所以我会看看我是否能找到任何有用的东西并报告回来。我发现 tomcat.apache.org 文档至少可以说令人困惑,而且我认为它也已经过时了。
-
@Adam 我现在必须使用静态 mod_jk.conf 文件。我希望你能找到解决办法。我也不相信那些 apache 文档,它们通常已经过时了。
标签: linux apache tomcat centos6 mod-jk