У меня странное поведение, моя конфигурация выглядит примерно так:
http {
limit_req_zone $binary_remote_addr zone=nocachelimit:10m rate=120r/m;
}
...
location "/api" {
{
limit_req zone=nocachelimit burst=20;
}
}
Независимо от того, какие значения я ставлю в ставку, я даже пробовал 1000р / с Я продолжаю получать записи журнала для "обычных" пользователей, которые говорят:
[warn] 16526#0: *4661 delaying request, excess: 1.000, by zone "nocachelimit"
Типичный вариант использования - это загрузка страницы, которая не попадает в зону + 4-5 запросов Ajax, которые должны быть ограничены этой зоной.
Что могло быть причиной такого поведения.
Скорость определяет, насколько быстро обрабатываются запросы. Если вы установите скорость 120 об / мин, это означает, что 1 запрос будет обрабатываться каждые 0,5 секунды.
Если вы получите сразу 5 запросов, это не значит, что все они будут выполнены. Они будут поставлены в очередь (до вашего размера пакета) и будут обрабатываться последовательно, 1 раз каждые 0,5 секунды.
Вы получаете это предупреждение, потому что дела идут в очередь и задерживаются. Это не значит, что их отвергают.
Если вы не хотите, чтобы что-то задерживалось, используйте параметр nodelay:
location "/api" {
limit_req zone=nocachelimit burst=20 nodelay;
}
Подробнее о том, как это работает, см. https://www.nginx.com/blog/rate-limiting-nginx/