Limit_req // nginx 1.24.0

Привет!

Указано у меня вот таким образом:
http {

limit_req_zone $server_name zone=ot:128m rate={{ nginx_rate_limit }}r/s;

server {

location /core/code {
limit_req zone=ot;

}

}

в результате, при nginx_rate_limit = 800 имеем в error.log notice что-то такое:

[error] 88538#0: *7037 limiting requests, excess: 1.000 by zone “ot”, client: 178.155.17.184, server: otclick-adv.ru, request: "GET
[error] 88542#0: *5901 limiting requests, excess: 0.200 by zone “ot”, client: 167.235.186.124, server: otclick-adv.ru, request: "POST

если же поставить nginx_rate_limit в 5000, то

[error] 88660#0: *627 limiting requests, excess: 1.000 by zone “ot”, client: 167.235.176.63, server: otclick-adv.ru, request: "POST
[error] 88624#0: *2651 limiting requests, excess: 1.000 by zone “ot”, client: 167.235.176.63, server: otclick-adv.ru, request: "POST

и такое ощущение, что пяти тысяч в секунду нет и вообще странно как то это работает.

Такое ощущение, что опция расчитана на небольшие ограничения - десятки/сотни запросов в секунду.

А опция burst+nodelay она в какой интервал времени пропускает указанное количество свыше нормы? В секунду? В 1/nginx_rate_limit секунды?

Спасибо.

Добрый день.

Нюанс работы limit_req в nginx состоит в том, что сконфигурированное в виде “запросы/секунду” ограничение пересчитывается и, соответственно, обрабатывается с точностью до миллисекунды.

То есть, 800r/s в конфигурации оперативно применяется как 8000r/s.

И поле ‘excess’ в сообщении лога — это также количество запросов в миллисекунду, превышающее сконфигурированное ограничение.

В таком же временном разрешении работают и параметры burst и nodelay.

Посмотрите, может вот это: NGINX Rate Limiting поможет вам разобраться.