Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

haproxy: set timeout if <condition>

Tags:

haproxy

The question seems to be quite straight and easy, however I have not been able to find a proper answer.

In haproxy I have 1 backend, say:

  • backend-1

and 2 frontends, say:

  • frontend-1
  • frontend-2

In the backend stanza I want to set a "timeout server" parameter, but, only if the connection comes from frontend-1.

As I didn't find anything I tried to figure it out myself:

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

This syntax does not work, and I am mentioning it to let understand what I am trying to achieve.

like image 878
maxadamo Avatar asked Feb 10 '26 19:02

maxadamo


2 Answers

This is not doable yet in HAProxy. Later, you will be able to set timeouts using tcp-request and http-request rules.

What we usually do to workaround this for now, is that we setup 2 backends using the same parameters, but different timeout servers. This is useful when a few urls only deserve a long server timeout.

Edit followup your comment about multiple health checks: Well, that's why the server's 'track' directive exists:

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

In the conf above, the server in my_app_longtime backend won't be checked. That said, it will follow up the same state than srv1 in the backend my_app.

Baptiste

Baptiste

like image 84
Baptiste Avatar answered Feb 12 '26 18:02

Baptiste


I did it like this and it worked. It made it possible to extend timeout on specific app urls, which are more time consuming. Used that trace health check - thanks 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
like image 44
Jakub Kujawski Avatar answered Feb 12 '26 19:02

Jakub Kujawski