Re: проблема с add_header и if

Yuriy Taraday yorik.sar at gmail.com
Sun Oct 18 11:11:20 MSD 2009


Примерно так он и собирается сделать. Смотрите рассылку.

2009/10/18 Alex, the Marrch Ca'at <marrch.caat at gmail.com>:
> Странная складывается ситуация. Судя по всему, Игорь полагает, что так
> и надо и нефиг if иначе использовать, и исправлять ситуацию с if-ами
> не намерен. Но если все НАСТОЛЬКО плохо и вообще это не бага, а фича,
> - то проще было бы вместо якобы универсальной директивы "if () {...}",
> порождающей кучу лишних проблем и вопросов и просто не
> предназначенной, чтобы работать - ввести две нормальных директивы
> "rewriteif() ... ;" и "returnif() ... ;", которые не будут и пытаться
> делать того, для чего не предназначены, и никаких проблем с ними не
> будет.
> Но нет, оказывается проще оставить все как есть и постоянно всем
> объяснять, что заявленной в документации функцией пользоваться не
> следует...
>
> В недоумении, Алекс Марртовский.
>
> 2009/10/16 Maxim Dounin <mdounin at mdounin.ru>:
>> Hello!
>>
>> On Fri, Oct 16, 2009 at 05:50:44PM +0400, Павел Хоружий wrote:
>>
>>> Добрый день.
>>>
>>> Встретился со странной проблемой.
>>> Есть кусок конфига:
>>>
>>> set $var "";
>>> if ($arg_param != ""){
>>> set $var "asd";
>>> add_header Set-Cookie "coo1=1; path=/";
>>> add_header Set-Cookie "coo2=1; path=/";
>>> }
>>>
>>> if ($host ~* "test"){
>>> set $var "$var 123";
>>>
>>> add_header Set-Cookie "coo3=1; path=/";
>>> add_header Set-Cookie "coo4=1; path=/";
>>> }
>>>
>>> add_header test_header "$var";
>>>
>>> \\nginx 0.7.62
>>>
>>> 1. Если условия выполняются для обоих if, то заголовки из первого if в
>>> ответе клиенту не присутствуют, а заголовоки из второго есть.
>>> Если убрать из второго if заголовки, то для первого они все равно не
>>> появляются. Заголовок test_header отсутствует.
>>> 2. Если условие выполняется для одного из if, то присутствуют
>>> заголовки отработавшего сравнения, а заголовок test_header отсутвует.
>>> 3. Если убрать из второго if заговки, то в ответе присутствует только
>>> заголовок test_header.
>>>
>>> Что можете посоветовать?
>>
>> Это ещё один known issue.  If is evil.  Не используйте в if()
>> ничего кроме return или rewrite ... last;.
>>
>> Maxim Dounin
>>
>> p.s. Надо было всё-таки сделать доклад про if() на highload.
>> Как-то так: "if() в конфигах nginx - 1001 способ прострелить себе ногу".
>>
>>
>


More information about the nginx-ru mailing list