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

Maxim Dounin mdounin at mdounin.ru
Fri Oct 16 18:22:27 MSD 2009


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