Hi,

I want to implement a rate-limit system using the sticky table of HAProxy. Consider that I have 100 servers, and a limit of 10 requests per server, the ACL would be:

    http-request track-sc0 int(1) table GlobalRequestsTracker
    http-request deny deny_status 429 if { sc0_http_req_rate(GlobalRequestsTracker),div(100) gt 10 }

Now if I want to make this dynamic depending on the healthy servers count, I need to replace the hardcoded `100` per the `nbsrv` converter like this:

    http-request track-sc0 int(1) table GlobalRequestsTracker
    http-request deny deny_status 429 if { sc0_http_req_rate(GlobalRequestsTracker),div(nbsrv(MyBackend)) gt 10 }

But I'm getting the error:

    error detected while parsing an 'http-request deny' condition : invalid args in converter 'div' : expects an integer or a variable name in ACL expression 'sc0_http_req_rate(GlobalRequestsTracker),div(nbsrv(MyBackend))'.

Is there a way to use `nbsrv` as a variable inside the `div` operator?

Thanks a lot!


Reply via email to