ПРОЕКТЫ 


  АРХИВ 


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: limit_req_zone, переменный rate



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


 




Copyright © Lexa Software, 1996-2009.