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

Maxim Dounin mdounin на mdounin.ru
Пт Мар 12 19:27:41 MSK 2010


Hello!

On Fri, Mar 12, 2010 at 06:39:24PM +0300, Kirill A. Korinskiy wrote:

> At Fri, 12 Mar 2010 18:24:29 +0300,
> Maxim Dounin <mdounin at mdounin.ru> wrote:
> > 
> > Hello!
> > 
> > On Fri, Mar 12, 2010 at 04:07:29PM +0300, Kirill A. Korinskiy wrote:
> > 
> > > At Thu, 11 Mar 2010 16:18:40 +0300,
> > > Maxim Dounin <mdounin at mdounin.ru> wrote:
> > > > 
> > > > 
> > > >     location / {
> > > >         recursive_error_pages on;
> > > >         error_page 403 = @vogons;
> > > > 
> > > >         if ($bad) {
> > > >             return 403;
> > > >         }
> > > > 
> > > >         limit_req zone=mostlyharmless burst=10 nodelay;
> > > > 
> > > >         ...
> > > >     }
> > > > 
> > > 
> > > А вот принял бы игорь тот патч на rewrite в именованный location все было бы много
> > > очевидней, правда? ;)
> > 
> > Я привык, мне уже пофигу.
> > 
> 
> Ты, я или любой кто в nginx тыкает палочкой долго привыкли. А новички не понимают магию
> return + error_page;

Она, на самом деле, хорошая, годная.  И error_page 404 - на самом 
деле лучше, чем тот же try_files, ибо не имеет race'ов.

Но не будем разводить ещё и этот флейм. :)

> > Но на самом деле с именованными location'ами есть более одних 
> > грабель.  Нет защиты от циклов (патчи я кидал; error_page от этого 
> > защищён хоть как-то, а вот rewrite - вообще никак), не выполняется 
> > server rewrite phase (что логично) и не чистятся контексты модулей 
> > (что может доставлять, но связано с предыдущим пунктом).
> > 
> 
> Защищаться от циклов глупо. Сделал человек цикл, значит сам дурак или ты можешь показать
> пример как сделать неявный цикл?

Защищаться от циклов - насущная необходимость, чтобы кривым 
конфигом нельзя было угробить сервер.

А "неявный" - это кому как.  Я вот этот патчик не на пустом месте 
рисовал, а потому что ко мне пришли разбираться:

http://nginx.org/pipermail/nginx-devel/2010-January/000099.html

Понятно, что человек указавший несуществующий именованный location 
- сам себе злобный буратино.  Но приличный сервер не должен из-за 
этого кушать 100% cpu и переставать обрабатывать запросы, он 
ругаться должен.

> Вот последние две вещи, лично мне, удобны. Т.е. когда надо чистить я делаю return +
> error_page, когда не надо чистить rewrite.

Внутренние редиректы - чистят, переходы в именованные location'ы - 
не чистят.  От метода вызова это не зависит.

И уже есть модули где это выходит боком.  Ибо они подбирают старый 
контекст и пытаются с ним работать, впадая в бесконечный цикл.  
Понятно что это в первую очередь проблема данных модулей, но 
нифига не понятно интуитивно.

Тем более что семантика у переходов в named location'ы совсем даже 
не предполагает отличий в этом месте.  С другой стороны, чистить 
нельзя - ибо, как я уже писал, server rewrite phase по очевидным 
причинам не выполняется, и контексты поставленные там нужно 
сохранять.

Maxim Dounin



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