Apache 代理超时

Apache 代理超时

我试图了解 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也应该会看到一条附加消息:。

相关内容