我使用apache (2.2.15)和tomcat6 (6.0.24)上CentOS 6.4并想使用该功能与通过将自动生成mod_jk.conf文件Tomcat服务器:
apache (2.2.15)
tomcat6 (6.0.24)
CentOS 6.4
<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的副本:
</Engine>
########## 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://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中生成标记:
<VirtualHost localhost>
<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文件。
server.xml
这里有什么想法吗?即使我在启动时在Tomcat的日志文件中收到错误,我的应用程序仍然可以工作。忽略了Tomcat的错误?或使用没有虚拟标签的静态mod_jk.conf文件或<VirtualHost *:80>获得我想要的东西?
<VirtualHost *:80>
好的,这就是您的答案-使用静态的mod_jk.conf文件。
Tomcat用户列表归档
tomcat开发人员认为此ApacheConfig自动生成功能不足以用于生产,因此在tomcat 7中已将其删除。大概这个问题太复杂了,优先级还不够高。