ПРОЕКТЫ 


  АРХИВ 


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: If is Evil


  • To: "nginx-ru@xxxxxxxxx" <nginx-ru@xxxxxxxxx>
  • Subject: Re: If is Evil
  • From: Васильев "Zmey!" Олег <zmey1992@xxxxx>
  • Date: Mon, 02 Sep 2013 04:53:03 +0400
  • Dkim-signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yandex.ru; s=mail; t=1378083183; bh=vAeAKnc6SM39Cmx04FX3cKEzdTuTFLn0sJXi2NcOY/E=; h=From:To:In-Reply-To:References:Subject:Date; b=bnQJfcuM8+atri8RydiI6vH9SZuQsZnB/+WEbbqgMjEerfcGgNul1QXPVGGvIfRz4 7srq/Xdqn5O0i2w0KHQ6b1VW2FST6uktwpUyaMdavLJ9yJjJDH6aNvp9CBfpmfjdIK aUewi1SkVWoeVtDUR1a0cZilck9ybLOyOBjKU50Q=
  • Envelope-from: zmey1992@xxxxxxxxx
  • In-reply-to: <20130901234231.GI29448@mdounin.ru>
  • References: <CAK1EO=WJmRTg9-JzG9fLu=zyfX363yYBFtSQOruMQC-DDu-y8Q@mail.gmail.com> <20130901234231.GI29448@mdounin.ru>

Попытаюсь вклиниться в тему. Есть давно волнующий вопрос как раз на ряду с 
этими if-ами. Есть какой-то список директив, которые наследуются (или не 
наследуются) в location-ах из уровня выше и такой же для if-ов? Был бы крайне 
полезный материал, т.к. в голове всё удержать не выходит.

02.09.2013, 03:42, "Maxim Dounin" <mdounin@xxxxxxxxxx>:
> Hello!
>
> On Sun, Sep 01, 2013 at 09:31:35PM +0300, Андрей Середенко wrote:
>
>>  Приветы всем!
>>
>>  Тысячи раз уже слышал, что использовать if в location КРАЙНЕ не
>>  рекомендуется, и что использовать его там можно только в купе с return или
>>  rewrite..last, но - все же хочется разобраться, КАК он отрабатывает и
>>  почему.
>>
>>  Пару рабочих дней было потрачено на то, чтобы разобраться, как оно
>>  работает. Но в итоге выяснилось, что сишку я уже неприлично подзабыл, а все
>>  гуглы мира ведут на 3 ссылки:
>>
>>      http://wiki.nginx.org/IfIsEvil
>>      http://habrahabr.ru/post/74135/
>>      http://agentzh.blogspot.com/2011/03/how-nginx-location-if-works.html
>>
>>  Но в первой кроме лирики толком ничего не сказано, вторая просто с первого
>>  же примера плавит мозг, а в последней уже куда по-лучше, примеров
>>  несколько.. но все одно - какой принцип отработки не ясно(
>>
>>  Ребят, может кто может подробно и последовательно разжевать, КАК это
>>  работает? А то пока получалось обходиться без if'ов, но кто его знает, что
>>  будет завтра.. не хотелось бы оставить новый след от граблей, старый только
>>  вот зажил... да и выяснить причину раз и навсегда куда полезнее, чем просто
>>  запомнить постулат "скажем if в location - НЕТ"
>>
>>  Буду признателен за любые ответы. Спасибо!
>
> В первую голову - надо уяснить для себя, что if создаёт вложенный
> location.  И именно в этом location'е в результате будет обработан
> запрос, если if выполнется.  Если таких if'ов много - то запрос
> будет обработан в последнем if'е, который выполнится.  Поэтому
> конфигурация вида
>
>     location / {
>         set $true 1;
>
>         if ($true) {
>             add_header X-Foo1 "bar";
>         }
>
>         if ($true) {
>             add_header X-Foo2 "bar";
>         }
>     }
>
> добавит только один заголовок, X-Foo2.  Эта особенность - что
> называется, не баг, а фича.
>
> А дальше начинаются костыли, подпорки, и прочие нюансы, связанные,
> в первую очередь, с тем, что if'ы, в отличие от обычных вложенных
> location'ов, пытаются наследовать директивы, которые в норме не
> наследуются во вложенные location'ы (e.g., proxy_pass).  Иногда
> это получается, иногда - получается, но неправильно, иногда - не
> получается вовсе.  Конкретные известные случаи нехорошего
> поведения - коллекционируются на страничке IfIsEvil.
>
> --
> Maxim Dounin
> http://nginx.org/en/donation.html
>
> _______________________________________________
> nginx-ru mailing list
> nginx-ru@xxxxxxxxx
> http://mailman.nginx.org/mailman/listinfo/nginx-ru

_______________________________________________
nginx-ru mailing list
nginx-ru@xxxxxxxxx
http://mailman.nginx.org/mailman/listinfo/nginx-ru


 




Copyright © Lexa Software, 1996-2009.