Hi, On Wed, Jan 23, Thomas Hilaire wrote: > 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?
Untested: does something like this work: http-request set-var(req.dummy) nbsrv(GlobalRequestsTracker) http-request deny deny_status 429 if { sc0_http_req_rate(GlobalRequestsTracker),div(req.dummy) gt 10 } -Jarno -- Jarno Huuskonen