我们最近开始使用 HAProxy,到目前为止一切正常。但是,我们在后端服务器(Debian + Apache + FCGID + PHP 7)上“随机”看到一些错误,如下所示:
[Wed Jan 31 08:22:22 2018] [warn] [client XXXX:XXXX::1] (70007)The timeout specified has expired: mod_fcgid: can't get data from http client, referer: XXX
在 HAProxy 服务器上,这将导致以下日志:
Jan 31 08:22:22 localhost haproxy[4029466]: 127.0.0.1:41408 [31/Jan/2018:08:05:12.587] http-in server/myservername 0/0/4/1029610/1029615 500 569 - - CD-- 64/64/0/0/0 0/0 "POST /file.php HTTP/1.1"
正如您所看到的,这些请求的Tr
时间Ta
相当长(1000 秒)。
我们在日志中没有看到任何其他错误,想知道是什么原因导致的,以及如何进一步调试?出于某种原因,后端服务器似乎没有从 HAProxy 检索数据?我们无法重现这种情况,这种情况大约每小时发生一次。我们在后端有几台服务器,HAProxy 服务器和后端服务器都很无聊(强大的 HAProxy 服务器上的负载小于 0.1)。
以下是我们的 HAProxy 配置的一部分(我们故意将超时时间设置得相当高):
mode http
log global
timeout connect 10s
timeout client 600s
timeout server 1200s
timeout check 90s
option log-health-checks
option httplog
option log-separate-errors
default-server inter 90s rise 3 fall 3
option httpchk GET check.php
其余一切都很标准。我应该注意,到目前为止,我们只在某些 POST 请求中看到这种情况,在 GET 请求中一次都没有看到。
更新:当我们不使用 HAProxy 并将流量直接发送到服务器时,不会发生此问题。所以它一定与 HAProxy 有某种关系。
有些 POST 请求可能非常大。我们可能需要调整一些缓冲区调整等吗?我们已经使用记录了此类请求的内容长度capture request header Content-Length len 10
,并且失败的此类请求的长度为 1084028(应 > 1MB)。