Haproxy - 超时 http 请求 vs 超时 http-keep-alive vs 超时服务器

Mik*_*evy 9 timeout haproxy keepalive keep-alive apache-2.2

我正在努力思考 haproxy 选项的方式

timeout http-request <timeout>
timeout http-keep-alive <timeout>
timeout server <timeout>
Run Code Online (Sandbox Code Playgroud)

彼此互动。我在位于 haproxy 负载均衡器后面的两个应用服务器上运行一个 Apache 网站。现在我没有启用 keep-alive,但我一直在尝试启用它,因为我认为它有助于优化网站。我的目标是为浏览器和 haproxy 之间的连接启用 keep-alive,但禁用 haproxy 和 apache 之间的 keep-alive。我用

option http-server-close
Run Code Online (Sandbox Code Playgroud)

现在我正在研究设置保持活动超时。我一直在研究超时 http-request 选项、超时 http-keep-alive 选项和超时服务器选项的haproxy 手册。如果我正确理解手册,超时 http-keep-alive 是在新请求之间保持连接打开的时间,超时 http-request 是在关闭连接之前等待响应标头的时间。但我似乎无法弄清楚的是超时服务器规定的内容。我想说超时服务器是等待完整响应的时间,但有人可以确认吗?如果我是对的,超时服务器是等待完整响应的时间,那么我是否正确,它不应该对保持活动超时设置有任何影响?

这是我正在修改的 haproxy 配置:

global
    maxconn 4096
    pidfile /var/run/haproxy.pid
    daemon

defaults
    mode http
    retries 3
    option redispatch
    maxconn 5000        
    timeout connect 5000
    timeout client 300000
    timeout server 300000        

listen HTTP *:80
    mode http
    cookie HTTP insert nocache
    balance roundrobin   
    #option httpclose # I just commented this out in favor of http-server-close
    option http-server-close
    timeout http-keep-alive 500 # from the haproxy manual suggestion of "tens to hundreds of ms"
    timeout http-request 5000 
    option forwardfor
    stats enable
    stats uri /my-lb-status
    stats auth myLbStatus:123456
    reqadd X-Forwarded-Proto:\ http
    option httpchk GET /robots.txt HTTP/1.0
    server SERVER_A 1.2.3.4:80 cookie app_01 check
    server maintenance 127.0.0.1:8080 backup
Run Code Online (Sandbox Code Playgroud)

最终,我的目标是能够在浏览器和 haproxy 之间打开保持活动状态,并要求能够运行报告,该报告可能需要 2-3 分钟才能在应用服务器上运行。

edl*_*erd 20

只是为了澄清一点。我希望这也能回答你的问题。

超时http请求

是从收到第一个客户端字节到发送到客户端的最后一个字节的时间(无论是否保持活动)。因此,如果您的后端太慢或客户端发送请求太慢,则整个通信可能需要比这更长的时间,并且请求会被丢弃(并向客户端发送超时)。

超时http-keep-alive

在 haproxy 和客户端之间保持连接打开的时间(在发送客户端响应之后)。这与后端响应时间无关。这与单个请求的长度(即 http-request 超时)无关。如果用户请求多个资源(即 html、img 和 js),这允许更快的响应。通过保持活动,单个请求可以使用相同的 tcp 连接。这样可以减少整个网页的加载时间。

超时服务器

这是您的后端服务器的超时时间。到达时,haproxy 回复 504(网关超时)。这也与保持活动无关,因为它仅与代理和后端之间的连接有关。

  • 默认情况下,“http-request 超时”仅适用于请求*标头*,因此实际“GET”或“POST”行必须到达的时间。不是整个请求+响应周期的持续时间。请参阅http://docs.haproxy.org/2.6/configuration.html#4.2-timeout%20http-request (3认同)