<div dir="ltr">Thanks for the explanation<div><br><div>I understand how Nginx works with limit_req, and what I'm looking for is precisely to find this "reasonable value" for each endpoint (testing the application side behavior is also important, but since there are multiple endpoints with hundreds of different functions, it might be a bit challenging to analyze in a short amount of time).<br><br>We already use rate_limit in one of these applications, but I had to conduct a series of tests to arrive at a reasonable value. As we have several other services, I would like an analysis and monitoring tool to track requests over time and be able to assess requests per minute/second for each endpoint. This way, I can initially get a better idea and later make a more customized adjustment.  For this specific endpoint, for example, I'm using:<br></div><div><br></div><div>   limit_req_zone $binary_remote_addr zone=api:10m rate=1r/s <br></div><div>   limit_req zone=api burst=10 nodelay</div><div><div><div dir="ltr" class="gmail_signature" data-smartmail="gmail_signature"><div dir="ltr"><div style="color:rgb(34,34,34)"><span style="font-family:"times new roman",serif"><br></span></div><div style="color:rgb(34,34,34)"><span style="font-family:"times new roman",serif"><br></span></div></div></div></div><br></div></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Fri, Dec 29, 2023 at 11:07 AM Maxim Dounin <<a href="mailto:mdounin@mdounin.ru">mdounin@mdounin.ru</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Hello!<br>
<br>
On Fri, Dec 29, 2023 at 09:54:30AM -0300, Rejaine Monteiro wrote:<br>
<br>
> Hi all,<br>
> <br>
> I´m running Nginx community edition and need to implement rate limiting<br>
> <br>
> There's plenty of guides out there on how to do this, but no guides on how<br>
> to get real values/stats from the access logs<br>
> <br>
> <br>
> What I need to get from the NGINX access logs is:<br>
> <br>
> - Requests per minute, per IP address<br>
> <br>
> - Average requests per minute, derived from all IP addresses<br>
> <br>
> - Max requests per minute, per IP address<br>
> <br>
> We have a few endpoints with different functionalities and we simply cannot<br>
> have a common rule that works for everyone.<br>
> <br>
> Any tips on a tool or script that could help generate this type of<br>
> information (if possible in real time or collect this data for future<br>
> analysis)?<br>
<br>
Note that nginx's limit_req module implements limiting based on <br>
the "leaky bucket" algorithm, which permits traffic bursts when <br>
properly configured, and therefore there is no need to calculate <br>
exact rates of requests per minute and so on.<br>
<br>
Rather, I would recommend to focus on the number of requests a <br>
typical legitimate user can generate to the protected resources <br>
within a short period of time, and set large enough burst= value <br>
to ensure legitimate users are not limited.  Then use some <br>
reasonable long-term rate - this does not need to be exact, but <br>
rather somewhat reasonable, for example, to cover typical number <br>
of requests per day from a legitimate user.<br>
<br>
Note well that using "nodelay" (or "delay=N") is recommended with <br>
such approach, see <a href="http://nginx.org/r/limit_req" rel="noreferrer" target="_blank">http://nginx.org/r/limit_req</a> for details.<br>
<br>
-- <br>
Maxim Dounin<br>
<a href="http://mdounin.ru/" rel="noreferrer" target="_blank">http://mdounin.ru/</a><br>
_______________________________________________<br>
nginx mailing list<br>
<a href="mailto:nginx@nginx.org" target="_blank">nginx@nginx.org</a><br>
<a href="https://mailman.nginx.org/mailman/listinfo/nginx" rel="noreferrer" target="_blank">https://mailman.nginx.org/mailman/listinfo/nginx</a><br>
</blockquote></div>

<br>
<font face="Arial, Helvetica, sans-serif" size="1" color="#808080"><i>Esta mensagem pode conter informações confidenciais ou privilegiadas, sendo seu sigilo protegido por lei. Se você não for o destinatário ou a pessoa autorizada a receber esta mensagem, não pode usar, copiar ou divulgar as informações nela contidas ou tomar qualquer ação baseada nessas informações. Se você recebeu esta mensagem por engano, por favor avise imediatamente ao remetente, respondendo o e-mail e em seguida apague-o. Agradecemos sua cooperação.</i></font>