haproxy:如果 <condition> 则设置超时

haproxy: set timeout if <condition>

这个问题看起来很简单,但是我一直没能找到合适的答案。

在 haproxy 中我有 1 个后端,比如:

和 2 个前端,比如:

在后端节中,我想设置一个 "timeout server" 参数,但是,前提是连接来自 frontend-1。

因为我没有找到任何东西,所以我试图自己弄明白:

backend backend-1
    bind *:80
    option <blahblah_option>
    timeout server 1d if frontend frontend-1

此语法无效,我提到它是为了让您了解我正在努力实现的目标。

这在 HAProxy 中尚不可行。 稍后,您将能够使用 tcp-request 和 http-request 规则设置超时。

我们现在通常做的是解决这个问题,我们使用相同的参数设置 2 个后端,但超时服务器不同。 当一些 url 只需要很长的服务器超时时,这很有用。

编辑跟进您关于多项健康检查的评论: 嗯,这就是服务器的 'track' 指令存在的原因:

backend my_app
 server srv1 10.0.0.1:80 check

backend my_app_longtime
 server srv1 10.0.0.1:80 track my_app/srv1

在上面的配置中,my_app_longtime后端的服务器不会被检查。也就是说,它会在后端跟进与 srv1 相同的状态 my_app.

巴蒂斯特

巴蒂斯特

我是这样做的并且成功了。它可以延长特定应用程序 url 的超时时间,这会更耗时。使用跟踪健康检查 - 感谢 Babtiste。

frontend www-http
    bind 10.0.0.1:80
    default_backend app

    acl long_url  path_beg -i /long_url

    use_backend app-extended if long_url

backend app
    server web-1 10.0.0.2:80 check

backend app-extended
    server web-1 10.0.0.2:80 trace app/web-1
    timeout server 10m