HAProxy 120 秒后仍然返回 502

HAProxy 120 秒后仍然返回 502

我已经配置了 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指令,这是我经过几次测试后的文件。

还有一些其他的acluse_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

相关内容