我在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>
获取我想要的内容?
答案 0 :(得分:2)
这是你的答案 - 使用静态mod_jk.conf文件。
tomcat开发人员认为这种ApacheConfig自动生成功能不足以进行生产,而在tomcat 7中,它已被删除。据推测,这个问题太复杂,而且优先级不够高。