Hello!

On Mon, Apr 20, 2015 at 09:13:24AM -0400, nNgzlTtv3k5lzmKRvlmS22tSl8sJr68k 
wrote:

> Задаю в секции server{} следующее
> 
> set $do_log 0;
> if ($status = 200){ set $do_log 1; }
> access_log /var/log/nginx/code-200.log combined if=$do_log;
> 
> логгирование не работает, в лог вообще ничего не летит. Если использовать
> другие переменные, не $status, работает. Это ошибка в nginx ?

Нет, это ошибка в конфиге.  Директивы модуля rewrite выполняются 
до того, как становится известен статус ответа, соответственно 
директива if в вышеприведённом фрагменте не может сработать 
никогда.

Правильно так:

    map $status $status_200 {
        200     1;
    }

    access_log /path/to/200.log combined if=$status_200;

Подробнее про директивы модуля rewrite, если всё-таки хочется их 
использовать, имеет смысл прочитать тут:

http://nginx.org/ru/docs/http/ngx_http_rewrite_module.html

Подробнее про map тут:

http://nginx.org/ru/docs/http/ngx_http_map_module.html

-- 
Maxim Dounin
http://nginx.org/

_______________________________________________
nginx-ru mailing list
[email protected]
http://mailman.nginx.org/mailman/listinfo/nginx-ru

Ответить