ngx_http_limit_req_module

Maxim Dounin mdounin на mdounin.ru
Вт Фев 1 15:36:07 MSK 2011


Hello!

On Tue, Feb 01, 2011 at 02:49:14PM +0300, Антон Исайкин wrote:

> Добрый день.
> 
> Подскажите пожалуйста, верно ли я понимаю принцип работы директивы
> limit_req_zone. Мне необходимо ограничить число запросов в час для IP

Принцип работы описан тут:

http://en.wikipedia.org/wiki/Leaky_bucket

Ключевые моменты:

1. limit_req ограничивает скорость, а не количество запросов за 
определённый период.

2. Максимально количество запросов, которые могут поступить от 
клиента за произвольно короткий промежуток времени, и при этом 
будут обслужены - задаётся параметром burst.

3. Если запросы поступают со скоростью большей, чем разрешено (но 
в пределах burst), то в зависимости от параметра nodelay они будут 
либо задерживаться до заданной скорости, либо нет.

> адреса (h для обозначения часа не поддерживается) в количестве 180
> запросов. При текущем синтаксисе мне надо написать что-то подобное:
> 
> limit_req_zone  $binary_remote_addr  zone=one:10m   rate=3r/m;
> ...
> limit_req   zone=one  burst=177;
> 
> Эквивалентна ли такая запись требуемому условию?

При таком конфиге за час можно будет сделать максимум (3 r/m * 60 
m) + 177 r = 357 запросов (в случае, если запросов в предыдущий 
час не было).  Если запросы поступают постоянно - то только 180.

При этом за произвольно короткий промежуток времени можно будет 
сделать 177 запросов.  Эти запросы будут обслуживаться по очереди 
в течении 57 минут (скорее всего большей части ответов клиент не 
дождётся).

Если вы хотите разрешить не более 180 запросов за час в среднем, и 
при этом разрешить делать все эти запросы за произвольно короткий 
промежуток времени, то пишите так:

limit_req_zone $binary_remote_addr zone=one:10m rate=3r/m;
limit_req zone=one burst=180 nodelay;

Если задачи резрешить делать все эти запросы за произвольно 
короткий промежуток времени не стоит, то burst и nodelay можно 
ставить из других соображений.

Maxim Dounin



Подробная информация о списке рассылки nginx-ru