вс, 7 июн. 2020 г. в 19:59, Stefano Tranquillini <[email protected]>:

> Hello all,
>
> I'm moving to HA using it to replace NGINX and I've a question regarding
> how to do a Rate Limiting in HA that enables queuing the requests instead
> of closing them.
>
> I was able to limit per IP following those examples:
> https://www.haproxy.com/blog/four-examples-of-haproxy-rate-limiting/ .
> However, when the limit is reached, the users see the error and connection
> is closed.
>
> Since I come from NGINX, it has this handy feature
> https://www.nginx.com/blog/rate-limiting-nginx/ where connections that
> exceed the threshold are queued. Thus the user will still be able to do the
> calls but be delayed without him getting errors and keep the overall number
> of requests within threshold.
>
> Is there anything similar in HA? It should limit/queueing the user by IP.
>
> To explain with an example, we have two users Alice, with ip A.A.A.A and
> Bob with ip B.B.B.B The threshold is 30r/minute.
>
> So in 1 minute:
>
>    - Alice does 20 requests. -> that's fine
>    - Bob does 60 requests. -> the system caps the requset to 30 and then
>    process the other 30 later on (maybe also adding timeout/delay)
>    - Alice does 50 request -> the first 40 are fine, the next 10 are
>    queued.
>    - Bob does 20 requests -> they are queue after the one above.
>
> I saw that it can be done in general, by limiting the connections per
> host. But this will mean that it's cross IP and thus, if 500 is the limit
> - Alice  does 1 call
> - Bob does 1000 calls
> - Alice does another 1 call
> - Alice will be queued, that's not what i would like to have.
>
> is this possible? Is there anything similar that can be done?
>

it is not cross IP.  I wish nginx docs would be better on that.
first, in nginx terms it is limited by zone key. you can define key using
for example $binary_remote_addr$http_user_agent$ssl_client_ciphers
that means each unique combination of those parameters will be limited by
its own counter (or you can use nginx maps to construct such a zone key)

in haproxy you can see and example of

# Track client by base32+src (Host header + URL path + src IP)
http-request track-sc0 base32+src

which also means key definition may be as flexible as you can imagine.



>
> Thanks
>
>
> --
> *Stefano*
>
>

Reply via email to