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