【问题标题】:configuring tomat's server.xml file with auto generating mod_jk.conf使用自动生成 mod_jk.conf 配置 tomat 的 server.xml 文件
【发布时间】: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 中生成&lt;VirtualHost localhost&gt; 标签:

<Host name="localhost"  appBase="webapps" unpackWARs="true" autoDeploy="true"          xmlValidation="false" xmlNamespaceAware="false">

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

&lt;Host name="*:80" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false"&gt;

到 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 的错误?或者使用没有虚拟标签或&lt;VirtualHost *:80&gt; 的静态 mod_jk.conf 文件来获得我想要的东西??

【问题讨论】:

  • 很失望没有看到关于这个的任何答案!我现在正在 Debian 上做这个,所以我会看看我是否能找到任何有用的东西并报告回来。我发现 tomcat.apache.org 文档至少可以说令人困惑,而且我认为它也已经过时了。
  • @Adam 我现在必须使用静态 mod_jk.conf 文件。我希望你能找到解决办法。我也不相信那些 apache 文档,它们通常已经过时了。

标签: linux apache tomcat centos6 mod-jk


【解决方案1】:

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

Tomcat user list archive

tomcat 开发人员认为这个 ApacheConfig 自动生成功能对于生产来说不够好,在 tomcat 7 中,它被删除了。大概是问题太复杂,优先级不够高。

【讨论】:

  • 很高兴找到亚当。这完美地解释了它。希望其他人不会像我们那样浪费太多时间...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-04
  • 2012-03-18
  • 1970-01-01
相关资源
最近更新 更多