我已经配置了 HAProxy,它会将我的 http 请求转发到内部端口上的各种服务。
其中一个服务可能需要几分钟才能给出答案,但 120 秒后 HAProxy 仍会返回错误502 Bad Gateway
。
我尝试设置更高的超时时间,但没有成功。这是haproxy.cfg
文件
global
daemon
maxconn 4096
log 127.0.0.1 local0
defaults
mode http
timeout connect 5000ms
timeout client 50000ms
timeout server 50000ms
option forwardfor
option http-server-close
log global
frontend http-in
bind *:80
option tcplog
default_backend my_default_backend
timeout client 10m
timeout server 10m
acl is_test_request hdr(host) -i testrequest.mydomain.ext
use_backend test_timeout if is_test_request
backend test_timeout
timeout connect 10s
timeout server 10m
server s1 127.0.0.1:8099
listen admin
bind *:8080
stats enable
是的,有重复的timeout
指令,这是我经过几次测试后的文件。
还有一些其他的acl
,use_backend
但我已经把它们修剪掉了。
我如何为该服务设置更长的超时时间?
更新:
这是示例日志行
May 22 07:25:52 localhost haproxy[2552]: CLIENT_IP_REDACTED:PORT [22/May/2018:07:23:52.402] http-in test_timeout/s1 0/0/120004 204 SH 0/0/0/0/0 0/0
监听端口的服务8099
等待了 180 秒才发送响应,但 120 秒后 haproxy 返回了一个
502 Bad Gateway
The server returned an invalid or incomplete response.
答案1
日志条目中的SH
说明了一切。此字段称为断开连接时的会话状态,非常有价值。您记录的内容表明您需要更仔细地查看 Web 服务器的配置和行为。在 HAProxy 等待响应时,Web 服务器本身似乎正在关闭连接。
以下是我得出这个结论的过程:
S
:TCP 会话被服务器意外中止,或者服务器明确拒绝。
我们知道服务器没有拒绝连接,因此我们假设服务器已关闭它,并查看第二个值。
H
:代理正在等待来自服务器的完整、有效的响应标头(仅限 HTTP)。
因此,在代理收到\r\n\r\n
以下一组有效的 HTTP 响应标头之前,Web 服务器意外关闭了连接。
http://cbonte.github.io/haproxy-dconv/1.6/configuration.html#8.5