Apache 2.4.29 和 mod_jk 1.2.42 不转发到 tomcat

Posted

技术标签:

【中文标题】Apache 2.4.29 和 mod_jk 1.2.42 不转发到 tomcat【英文标题】:Apache 2.4.29 and mod_jk 1.2.42 not forwarding to tomcat 【发布时间】:2018-05-22 21:24:15 【问题描述】:

我正在使用 mod_jk 1.2.42 对 tomcat 8.5.11 进行 apache 2.4.29 安装。 我的问题是 apache + mod_jk 没有将请求转发给 tomcat。 我们有一个以前的 apache 安装 (2.2.31) 和 mod_jk (1.2.25) 针对同一个 tomcat 并且它工作正常。

这是我们在 mod_jk.log 文件中遇到的唯一错误/异常情况:

[Fri Dec 08 08:02:26.659 2017] [32025:140457247692544] [debug] jk_child_init::mod_jk.c (3478): Initialized mod_jk/1.2.42
[Fri Dec 08 08:02:41.987 2017] [31596:140455607994112] [debug] jk_translate::mod_jk.c (3859): missing uri map for mycompany.com:/SCDO
[Fri Dec 08 08:02:41.987 2017] [31596:140455607994112] [debug] jk_map_to_storage::mod_jk.c (4027): missing uri map for mycompany.com:/SCDO
[Fri Dec 08 08:02:42.007 2017] [31596:140455607994112] [debug] jk_translate::mod_jk.c (3859): missing uri map for mycompany.com:/error.html
[Fri Dec 08 08:02:42.007 2017] [31596:140455607994112] [debug] jk_map_to_storage::mod_jk.c (4027): missing uri map for mycompany.com:/error.html
[Fri Dec 08 08:19:53.665 2017] [31598:140457247692544] [debug] wc_shutdown::jk_worker.c (390): Shutting down worker ajp13

在访问日志中,我们只收到 404 错误。

这是 httpd.conf 的包含:

Include conf/mod_jk.conf

这是 mod_jk 配置:

<IfModule !mod_jk.c>
  LoadModule jk_module "/opt/apache-2.4.29/modules/mod_jk.so"
</IfModule>

JkWorkersFile "/opt/apache-2.4.29/conf/workers.properties"
#enable this log only for troubleshooting
JkLogFile "/opt/apache-2.4.29/logs/mod_jk.log"
JkLogLevel debug

    JkMount /servlets-examples ajp13
    JkMount /servlets-examples/* ajp13

    JkMount /jsp-examples ajp13
    JkMount /jsp-examples/* ajp13

    JkMount /probe ajp13
    JkMount /probe/* ajp13

   JkMount /SCDO  ajp13
   JkMount /SCDO/* ajp13

   JkMount /test  ajp13
   JkMount /test/* ajp13

   JkMount /mod_jk_status mystatus

这是workers.properties:

worker.list=ajp13
worker.ajp13.port=8010
worker.ajp13.host=localhost
worker.ajp13.type=ajp13
worker.ajp13.socket_timeout=300
worker.ajp13.max_packet_size=20000


worker.list=mystatus
worker.mystatus.type=status

任何想法都会受到赞赏。

【问题讨论】:

【参考方案1】:

很抱歉之前的回答。 您必须在 Tomcat 的 server.xml 文件中检查 AJP 1.3 连接器的超时和 maxPostSize* 值。 *从 Tomcat 7 及更高版本开始,maxPostSize 值必须小于 0 才能禁用它。 问候。

【讨论】:

【参考方案2】:

我遇到了同样的问题,这让我发疯了。它从我加载 LetsEncrypt 时开始...这是对我有用的修复:在每个 VirtualHost 部分添加“JkMountCopy On”。

例如:

在 /etc/httpd/conf.d/ 文件夹中,编辑任何具有 VirtualHost 定义 (grep VirtualHost *.conf) 的 .conf 文件 - 可能不止一个:

<VirtualHost _default_:443>

#Add the following line
JkMountCopy On 
....

这只是一个例子,它可能不会说 default:443 - 正如您可能猜到的那样,另一个是用于端口 80。如果您的主 httpd.conf 中有一个 VirtualHost 部分,它可能也需要它。我没有。

【讨论】:

一段时间后,我找到了相同的答案。我忘了回答我自己的问题。谢谢【参考方案3】:

让我为 Apache 中的问题添加另一个可能的原因 => 通过 AJP 的 Tomcat 通信问题。

在我的例子中,我在机器上安装了 libapache2-mod-jk 库,它创建了一个单独的工作文件。我检查了主机上的当前文件:

find / -name "workers.properties"

得到:

/etc/apache2/workers.properties
/etc/libapache2-mod-jk/workers.properties

之前一直如此:

我正在处理错误的文件(在 libapache2-mod-jk 中),因为我没有将 Apache 指向它。 Apache 在配置中使用了它的默认文件(在 apache2 内)和错误的工作标识符,因为我从错误的文件中获取了它。

以防万一您遇到类似的问题,并且确定您已经尝试了所有方法 - 请检查此问题。

【讨论】:

以上是关于Apache 2.4.29 和 mod_jk 1.2.42 不转发到 tomcat的主要内容,如果未能解决你的问题,请参考以下文章

Apache+Tomcat+mod_jk配置教程

Apache 停止响应 SSL + mod_jk

apache 到 tomcat:mod_jk 与 mod_proxy

Apache Tomcat: mod_jk 连接超时cping/cpong timeout

Apache/mod_jk 模块在运行一段时间后无法连接 jboss

使用 mod_jk 和 Apache httpd 时为 Tomcat 的 404 页面使用自定义错误页面