ПРОЕКТЫ 


  АРХИВ 


Apache-Talk @lexa.ru 

Inet-Admins @info.east.ru 

Filmscanners @halftone.co.uk 

Security-alerts @yandex-team.ru 

nginx-ru @sysoev.ru 


  СТАТЬИ 


  ПЕРСОНАЛЬНОЕ 


  ПРОГРАММЫ 



ПИШИТЕ
ПИСЬМА












     АРХИВ :: nginx-ru
Nginx-ru mailing list archive (nginx-ru@sysoev.ru)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: ngx_http_limit_req_module



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 mailing list
nginx-ru@xxxxxxxxx
http://nginx.org/mailman/listinfo/nginx-ru


 




Copyright © Lexa Software, 1996-2009.