我试图了解 Apache 2.2 error_log 中以下消息发生了什么:
Wed May 18 21:03:29 2011] [error] [client 172.20.10.10] (70007)The timeout specified has expired: proxy: error reading status line from remote server super-load1-ga.test.com, referer: https://tester2.test.com/boom/ga/inside.as
页
我们正在运行带有 mod_proxy 的 Apache 2.2。此 Apache 请求是否与 httpd.conf 中的 5 分钟超时值有关?(这意味着它在 5 分钟内没有收到来自远程服务器的响应。)或者这只是来自远程服务器的响应,表示它无法处理连接?
当我看到此错误时,Apache 很快就用完了其 MaxClients 数量。
代理条目的快速示例:
ProxyPass /boom/ga https://super-load1-ga.test.com
ProxyPassReverse /boom/ga https://super-load1-ga.test.com
答案1
您增加超时时间代理通行证指示:
ProxyPass /boom/ga https://super-load1-ga.test.com connectiontimeout=300 timeout=300
超时值秒。
答案2
听起来您的服务器https://super-load1-ga.example.com
响应时间太长了。
在这种情况下,如果它只是停留在那里,那么 Apache 进程就会等待它。该进程实际上被阻止了,即无法执行任何其他操作。如果您没有足够快地超时,那么您将耗尽 Apache 进程并达到 MaxClients,这似乎都是有道理的。
您应该在 super-load1-ga.test.com 网站上有日志来查看请求花费了多长时间,它们一定花费了一定时间。
你可以缩短 ProxyPass 连接的超时时间
http://httpd.apache.org/docs/current/mod/mod_proxy.html#workers
答案3
回答你的问题,是的,当 Apache2 httpd 超时时,代理模式下的 Apache2 httpd 确实会记录该错误消息。如果连接到代理模式下的 Apache2 httpd 的服务器是原因,则会出现不同的消息。
该消息有多个部分:The timeout specified has expired
是错误代码的等效文本APR_TIMEUP
,请参阅:
srclib/apr/misc/unix/错误代码.c
case APR_TIMEUP:
return "The timeout specified has expired";
然后proxy: error reading status line from remote server super-load1-ga.test.com
是在
模块/代理/mod_proxy_http.c
如果您将日志级别提升至 APLOG_DEBUG,您proxy: read timeout
也应该会看到一条附加消息:。