Apache 错误日志中的 Mod 集群代理超时

Posted

技术标签:

【中文标题】Apache 错误日志中的 Mod 集群代理超时【英文标题】:Mod cluster proxy timeout in apache error logs 【发布时间】:2014-01-12 00:34:23 【问题描述】:

在我们的环境中,我们始终在错误日志中获取这些条目。

[Sun Dec 22 20:29:43 2013] [error] (70007)The timeout specified has expired: ajp_ilink_receive() can't receive header
[Sun Dec 22 20:29:43 2013] [error] ajp_read_header: ajp_ilink_receive failed
[Sun Dec 22 20:29:43 2013] [error] (70007)The timeout specified has expired: proxy: read response failed from (null) (xx.xx.xx.xx)
[Sun Dec 22 20:30:01 2013] [error] (70007)The timeout specified has expired: ajp_ilink_receive() can't receive header

如果所有节点同时出现这些错误,站点将抛出 998 响应代码,直到重新启动使这些错误消失。 Apache 正在与后端 jboss 服务器通信。

可能导致这些问题的原因。根据我的观察,这可能是由于 Web 服务调用延迟导致 AJP 连接终止。

如果我错了,请纠正我,如何永久解决此问题。

谢谢。

【问题讨论】:

任何想法,我真的需要帮助... :( 【参考方案1】:

(迟到总比没有好)

我也有类似的问题;

[Mon Jan 20 13:39:57 2014] [error] (70007)The timeout specified has expired: ajp_ilink_receive() can't receive header
[Mon Jan 20 13:43:26 2014] [error] (70007)The timeout specified has expired: ajp_ilink_receive() can't receive header

这让我发现了这个:

如果未定义 nodeTimeout,则使用 ProxyTimeout 指令代理。如果未定义 ProxyTimeout,则使用服务器超时 (Timeout)(默认为 300 秒)。 nodeTimeout、ProxyTimeout 或 Timeout 在套接字级别设置。

我既没有 nodeTimeout 也没有 ProxyTimeout,这给我们留下了 Timeout 变量(设置为 60 秒)。在大多数情况下,网页返回 60 秒就足够了,但是对应用程序的调查显示,一个错误的 mysql 查询需要 20 多分钟(是的,几分钟!)才能运行。

您可以尝试增加超时时间,或者更有可能找出页面缓慢的原因。

【讨论】:

感谢您的回答.. 您的正确我最近发现使用无效参数调用了一个应用程序调用,该参数从未返回经常导致此问题的响应。现在它已修复。【参考方案2】:

我修复了这个错误如下:

 <Proxy *>
    AddDefaultCharset Off

    Order deny,allow

    Allow from all

 </Proxy>

ProxyPass / ajp://backend.example.com:8009/ retry=0 timeout=10 ttl=60

ProxyPassReverse / ajp://backend.example.com:8009/

【讨论】:

以上是关于Apache 错误日志中的 Mod 集群代理超时的主要内容,如果未能解决你的问题,请参考以下文章

Tomcat 的 Apache (httpd) 代理不断超时

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

Ubuntu16.04Apache负载均衡+集群

Apache代理502

apache反向代理tomcat

Apache 反向代理 Unix 套接字