除了我们正在获得的504问题之外,对haproxy和爱它很新。相关的日志输出是:
Jun 21 13:52:06 localhost haproxy[1431]: 192.168.0.2:51435 [21/Jun/2017:13:50:26.740] www-https~ beFootprints/foorprints 0/0/2/-1/100003 504 195 - - sH-- 2/2/0/0/0 0/0 "POST /MRcgi/MRlogin.pl HTTP/1.1"
Jun 21 13:54:26 localhost haproxy[1431]: 192.168.0.2:51447 [21/Jun/2017:13:52:46.577] www-https~ beFootprints/foorprints 0/0/3/-1/100005 504 195 - - sH-- 2/2/0/0/0 0/0 "POST /MRcgi/MRlogin.pl HTTP/1.1"
Jun 21 14:15:57 localhost haproxy[1431]: 192.168.0.1:50225 [21/Jun/2017:14:14:17.771] www-https~ beFootprints/foorprints 0/0/2/-1/100004 504 195 - - sH-- 3/3/0/0/0 0/0 "POST /MRcgi/MRlogin.pl HTTP/1.1"
Jun 21 14:22:26 localhost haproxy[1431]: 192.168.0.1:50258 [21/Jun/2017:14:20:46.608] www-https~ beFootprints/foorprints 0/0/2/-1/100003 504 195 - - sH-- 2/2/0/0/0 0/0 "POST /MRcgi/MRlogin.pl HTTP/1.1"
在haproxy.cfg中使用以下超时值
defaults
log global
mode http
option forwardfor
option httplog
option dontlognull
timeout connect 5000
timeout client 50000
timeout server 100000
在Ubuntu 16.04.2 LTS上运行
非常感谢任何帮助和评论!
答案 0 :(得分:5)
问题似乎与Web服务器有关。检查那里的日志,你应该找到长时间运行的请求。
以下是我的结论。
在日志中记下sH--
。这是session state at disconnection。它对于故障排除非常有价值。这些值是位置和区分大小写的。
s :等待服务器发送或接收数据时,服务器端超时已到期。
...所以,timeout server
被解雇了,而......
H :代理正在等待来自服务器的完整有效响应HEADERS(仅限HTTP)。
服务器尚未完成(可能甚至没有启动)将所有响应标头撤回到代理,但是已建立连接并且已发送请求。
HAProxy返回504 Gateway Timeout
,表示后端没有及时响应。
如果你的后端需要超过100秒(?!),那么你需要增加timeout server
。否则,您的Apache服务器似乎有一个问题太慢而无法响应。
答案 1 :(得分:0)
我遇到了类似的问题,发现问题出在我如何配置后端服务器部分。
backend no_match_backend
mode http
balance roundrobin
option forwardfor
option httpchk HEAD / HTTP/1.1\r\nHost:\ example.com
server nginx-example 192.168.0.10 check port 80
我的问题是我没有指定连接端口。 通过HTTP连接时可以使用,但是由于我的haproxy终止了SSL。 这尝试通过443连接到后端。 由于后端无法/无法正确通信。使用haproxy的SSL会话和导致网关超时的后端的设置。 我需要强制将未加密的通信发送到后端。
backend no_match_backend
mode http
balance roundrobin
option forwardfor
option httpchk HEAD / HTTP/1.1\r\nHost:\ example.com
server nginx-example 192.168.0.10:80 check port 80
很难发现server nginx-example 192.168.0.10 check port 80
的更改,而在IP :80
之后是192.168.0.10:80
由于配置了SSL重定向的后端服务器使此问题变得更加复杂。因此,我所有的请求都将以HTTP的形式到达并重定向到HTTPS。因此,很难确定问题出在哪里。一世 看起来https请求已正确重定向到后端服务器。我需要在后端服务器上禁用此重定向,并将其转发到haproxy config。