Tomcat 停止响应 Apache

问题描述 投票:0回答:6

我正在尝试解决有关使用 mod_proxy_ajp 连接 Apache 和 Tomcat 的问题。就我而言,Tomcat 停止响应 Apache,并且 apache 日志打印如下日志错误消息:

[Mon May 06 15:22:47 2013] [error] ajp_read_header: ajp_ilink_receive failed
[Mon May 06 15:22:47 2013] [error] (120006)APR does not understand this error code: proxy: read response failed from [::1]:18009 (localhost)

我不知道。有人可以帮助我吗?

apache tomcat mod-proxy
6个回答
15
投票

将 connectionTimeout 和 keepAliveTimeout 添加到 /etc/tomcat7/server.xml 中的 AJP 连接器。

<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" 
           connectionTimeout="10000" keepAliveTimeout="10000" />

有关 AJP 连接器的信息,请访问 https://tomcat.apache.org/tomcat-7.0-doc/config/ajp.html

  • connectionTimeout = 此连接器在接受连接后等待呈现请求 URI 行的毫秒数。 AJP 协议连接器的默认值为 -1(即无限)。

  • keepAliveTimeout = 此连接器在关闭连接之前等待另一个 AJP 请求的毫秒数。默认值是使用为connectionTimeout属性设置的值。

如果未定义connectionTimeout和keepAliveTimeout值,则AJP连接将无限期保持活动状态。导致线程较多,默认最大线程数为200。

我建议安装 psi-probe - Apache Tomcat 的高级管理器和监视器,从 Lambda Probe 分叉。 https://code.google.com/p/psi-probe/


6
投票

可以在 http://javaworkbench.blogspot.co.at/2013/09/apache-web-server-tomcat-ajp.html.

找到对该问题以及如何解决该问题的非常好的解释。

简而言之: - 将 Apache“MaxClients”配置为等于 Tomcat AJP“maxConnections”配置。 - 配置 Tomcat AJP 'keepAliveTimeout' 以在一段时间不活动后关闭连接。


5
投票

我正在将 tomcat 8 与 apache 2.2 和 Centos 一起使用,发现问题如下:

[error] ajp_read_header: ajp_ilink_receive failed
[error] (70007)The timeout specified has expired: proxy: read response failed

我应用的解决方案非常完美:

1. Configure Apache 'MaxClients' to be equal to the Tomcat AJP 'maxConnections' configuration.
2. Configure Tomcat AJP 'keepAliveTimeout' to close connections after a period of inactivity.

这是一个来自 tomcat server.xml 的示例:

<Connector port="8009" protocol="AJP/1.3" maxConnections="256" keepAliveTimeout="30000" redirectPort="8443" />

如果您喜欢这个解决方案,请投票给答案。 干杯


4
投票

试试这个:

  1. 尝试增加线程数。 (它会推迟错误)
  2. 在 tomcat 配置中尝试使用
    "org.apache.coyote.ajp.AjpProtocol"
    代替 APR。

0
投票

我遇到了同样的问题,我想知道为什么我找不到任何有关我的解决方案的信息:我只需在

secretRequired
配置中将
false
设置为
Connector

<Connector protocol="AJP/1.3"
           address="127.0.0.1"
           port="8009"
           redirectPort="8443"
           secretRequired="false"
/>

我的 Apache HTTPD 配置:

ProxyPass        /tomcat10 ajp://localhost:8009/

请注意,这可能不安全。也许最好保留

secretRequired="true"
并在 Apache HTTPD 端修复它。我只是想至少提示其他有同样问题的人可能会遇到什么问题。


0
投票

对于那些仍在寻找带有此错误消息的解决方案并且没有太多等待或建立的连接的人。

请记住,这可能是 SELinux 问题,因为配置文件“httpd_can_network_connect”无法被授权建立连接。因此,在这种情况下,请使用以下命令验证 SELinux 是否处于活动状态:

getenforce

...如果是“强制”,执行此命令行可以挽救您的生命:

setsebool -P httpd_can_network_connect 1

© www.soinside.com 2019 - 2024. All rights reserved.