我有一个 Web 服务,必须始终在 5 秒内响应请求。我使用 Apache 将请求代理到一组后端工作程序。当所有工作程序都已满时,Apache 会将请求排队并等待工作程序空闲。
我在 VirtualHost 中设置了超时 5
mod_proxy 似乎接管了 Timeout 指令,并使用它来限制工作程序响应请求所需的时间。这意味着请求可以在队列中备份,并且它们不会在 5 秒内超时。如果我不能在总共 5 秒内完成请求,我需要以 504 响应,我想要限制的不是代理工作程序所花费的时间,而是总的打开连接时间。或者,如果有一种方法可以限制等待空闲工作程序所花费的时间,那可能会奏效,但似乎没有一个平衡器指令可以做到这一点(我尝试了很多)
无论我的工作集群中发生什么情况,我如何才能让 Apache 在 5 秒内超时请求?
答案1
答案2
您可能想要使用更好的工具,例如 HAProxy,它专为代理而设计,并且具有非常灵活的超时配置,可让您指定总体超时或仅针对队列中的请求的超时:
例如:
defaults
balance roundrobin
mode http
timeout connect 4000ms
timeout queue 1000ms
timeout client 4000ms
timeout server 4000ms
timeout http-request 4000ms
option httpclose
option redispatch
您还可以获得不需要每个请求一个线程的好处。