>> 1. error_log вообще не поддерживает
>> переменных - ошибка "nginx: [emerg] open()
>> "/$home/log/error.log" failed (2: No such file or directory)"
>
>Да.
Ок, буду знать что это ограничение.
>> 2. access_log добавляет префикс (${prefix}), если
>> путь не начинается с символа "/" ("/$home"),
>> несмотря на то, что в значении
>> переменной он присутствует ("set $home
>> /home/www/example.com;").
>
>У access_log с переменными в имени куча ограничений:
>http://sysoev.ru/nginx/docs/http/ngx_http_log_module.html#access_log
>
>error_log и access_log можно определять на уровне сервера и они
>унаследуются во все location'ы. С fastcgi_pass так не получится.
Про ограничения access_log и про наследование знаю, но тут не в этом дело (видимо мой пример конфига получился не совсем однозначным в понимании...).
При определении переменной следующим образом:
set $home /home/www/example.com;
некоторые директивы раскрывают путь правильно:
root $home/www; # /home/www/example.com/www
fastcgi_pass unix:$home/php-fpm.sock; # /home/www/example.com/php-fpm.sock
root /$home/www; # //home/www/example.com/www
fastcgi_pass unix:/$home/php-fpm.sock; # //home/www/example.com/php-fpm.sock
а access_log ведет себя по иному :
access_log $home/log/access.log main; # /usr/local/etc/nginx//home/www/example.com/log/access.log
access_log /$home/log/access.log main; # //home/www/example.com/log/access.log
Собственно, проблема в этом - если путь в директиве access_log начинается не с "/", то он считается относительным без проверки значения переменной, в которой задан полный путь.