Re: limit_req_zone, переменный rate

Sergej Kandyla sk.paix на gmail.com
Чт Мар 11 19:57:12 MSK 2010


Maxim Dounin wrote:
>> 1) если стоит директива  limit_req_log_level notice;
>> то в error_log о limits не пишитеся вообще ничего.
>> (Linux 2.6.18-164.11.1.el5.028stab068.3  nginx/0.8.34)
>>     
>
> error_log при этом включён с каким уровнем логгирования?
>   
error_log        /var/log/nginx/error.log  notice;



>> Т.е. как видно на основе ответов курла и записей в error_log,
>> каждый последующий запрос обрабатывается в среднем на секунду
>> больше, чем предыдущий, по истечению моего burst=10,
>> получаю 503, что законно.
>>
>> каждый мой последующий запрос должен задерживаться на минуту
>> (согласно rate=1r/m) или N минут если это N запрос в пределах burst.
>> В принципе текущее поведение с задержкой на секунду сделано вполне
>> мудро, но вопрос в том, как оно на самом деле  должно
>> обрабатываеться.
>> Фича\баг ?
>>     
>
> Бага.  Чтобы получить описанный в доках CBR должно задерживаться 
> на (сейчас в корзине) / rate, по факту задерживается на (сейчас в 
> корзине).
>
> Впрочем, мне лично всегда казалось вообще неправильным пытаться 
> задерживать запросы.  Возможности для DoS'а это только 
> увеличивает.  Гораздо правильнее использовать описанный в доках 
> nodelay.
>
>   
это верно,
я его и использую для обычных клиентов ;)

но понимать как в целом работает нужный модуль - никогда лишним не будет.

да и  burst без nodelay по сути будет являться  неким backlogом для бекенда,
и может использоваться чтобы лимитировать нагрузку на бекенд.

Ведь если ботнет ломанется на сервак, и будет слать по пачке запросов с 
каждого айпишника
раз в несколько минут - то  delay тут как нельзя лучше. (дальше 
скриптами анализируем
error и access log на предмет агресивных ботов - и блокируем на уровне 
nginx, а лучше firewall)

А для обычных клиентов - nodelay, определенно.

Благо, делить клиентов, как оказалось, совсем не так сложно, спасибо вам!




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