我正在尝试理解 haproxy 选项
timeout http-request <timeout>
timeout http-keep-alive <timeout>
timeout server <timeout>
相互交互。我在两个应用服务器上运行一个 Apache 网站,这两个应用服务器位于一个 haproxy 负载平衡器后面。目前我还没有启用 keep-alive,但我一直在尝试启用它,因为我认为这将有助于优化网站。我的目标是为浏览器和 haproxy 之间的连接启用 keep-alive,但禁用 haproxy 和 apache 之间的 keep-alive。我通过以下方式实现了这一点
option http-server-close
现在我正在研究如何设置保持活动超时。我一直在研究haproxy 使用手册对于超时 http 请求选项、超时 http 保持活动选项和超时服务器选项。如果我正确理解了手册,超时 http 保持活动是在新请求之间保持连接打开的时间,超时 http 请求是在关闭连接之前等待响应标头的时间。但我似乎无法弄清楚超时服务器规定的是什么。我想说超时服务器是等待完整响应的时间,但有人能证实这一点吗?如果我说的没错,超时服务器是等待完整响应的时间,那么我是否正确地认为它不应该对保持活动超时设置有任何影响?
这是我正在修改的 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
最终,我的目标是能够在浏览器和 haproxy 之间打开保持活动功能,要求能够运行在应用服务器上运行需要 2-3 分钟的报告。
答案1
只是想澄清一下。我希望这也能回答你的问题。
http 请求超时
是从收到第一个客户端字节到向客户端发送最后一个字节的时间(无论是否保持活动状态)。因此,如果您的后端太慢或客户端发送请求太慢,整个通信可能需要更长的时间,并且请求将被丢弃(并向客户端发送超时)。
超时 http-keep-alive
保持 haproxy 和客户端之间的连接打开的时间(在客户端响应发出后)。这与后端响应时间无关。这与单个请求的长度无关(即 http 请求超时)。如果用户请求多个资源(即 html、img 和 js),这可以实现更快的响应。使用 keep alive,单个请求可以使用相同的 tcp 连接。这样可以减少完整网页的加载时间。
超时服务器
这是后端服务器的超时时间。达到该时间后,haproxy 将回复 504(网关超时)。这也与保持活动无关,因为它仅与代理和后端之间的连接有关。