Как вести отдельные логи ошибок nginx для виртуальных хостов?

Требуется настроить отдельный лог ошибок nginx для каждого виртуального хоста.
Система FreeBSD 9.1
Nginx 1.2.4 работает как фронт-энд к Apache2.2
nginx -V:
nginx version: nginx/1.2.4
configure arguments: --prefix=/usr/local/etc/nginx --with-cc-opt='-I /usr/local/include' --with-ld-opt='-L /usr/local/lib' --conf-path=/usr/local/etc/nginx/nginx.conf --sbin-path=/usr/local/sbin/nginx --pid-path=/var/run/nginx.pid --error-log-path=/var/log/nginx-error.log --user=www --group=www --with-ipv6 --http-client-body-temp-path=/var/tmp/nginx/client_body_temp --http-fastcgi-temp-path=/var/tmp/nginx/fastcgi_temp --http-proxy-temp-path=/var/tmp/nginx/proxy_temp --http-scgi-temp-path=/var/tmp/nginx/scgi_temp --http-uwsgi-temp-path=/var/tmp/nginx/uwsgi_temp --http-log-path=/var/log/nginx-access.log --with-http_stub_status_module --with-pcre


Полный листинг /usr/local/etc/nginx.conf:
worker_processes  32;


events {
    worker_connections  1024;
    use kqueue;
}

http {
    client_max_body_size 10m;
    include       mime.types;
    include       ipblock.conf;
    default_type  application/octet-stream;

    sendfile        on;

    keepalive_timeout  5;

    
    gzip on;
    gzip_proxied any;
    gzip_comp_level 5;
    gzip_min_length 1024;
    gzip_types text/css text/plain text/json text/x-js text/javascript text/xml application/json application/x-javascript application/xml application/xml+rss application/javascript;
    gzip_http_version 1.0;
    gzip_disable "msie6";
    gzip_vary on;

    server {
    
        listen       80;
        server_name   ~^(www\.)?(?<domain>.+)$;
        
        charset utf-8;
	
	access_log  /var/log/nginx/$host-access.log;
	error_log   /var/log/nginx/$host-error.log error;
	
	if ($http_user_agent ~* 2gis) {
	    return 444;
	}
	
        location / {
    	    error_page 412 = @dynamic;
    	    if ($request_method = 'POST') {return 412;}
    	    if ($is_args = '?') {return 412;}
    	    if ($cookie_umicms_session) {return 412;}
    	    
    	    try_files $uri/index.html @dynamic;
    	    root /usr/local/www/apache22/cache;
    	    index index.php;
        }
        
        location @dynamic {
    	    proxy_set_header	Host		$host;
    	    proxy_set_header	X-Real-IP	$remote_addr;
    	    proxy_set_header	X-Forwarded-For	$remote_addr;
    	    proxy_pass		http://185.11.244.233:81;
        }
         
        location ~* ^/admin {
    	    error_page 412 = @dynamic;
    	    return 412;
        }
        
        location ~* \.php$ {
    	    error_page 412 = @dynamic;
    	    return 412;
        }

	location ~* /ulang/ {
	    error_page 412 = @dynamic;
	    return 412;
	}
	
	location ~* ^.+\.(jpg|jpeg|gif|png|ico|css|pdf|ppt|bmp|rtf|js|otf|svg|eot|woff)$ {
	    root /usr/local/www/apache22/vhosts/$domain;
	    access_log off;
	    expires 7d;
	}
	
	location ~* (config\.ini|install\.ini|install\.log|umi\.nginx\.conf|dbview\.php|umibackup) {
	    rewrite ^(.*)$ / permanent;
	}

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   /usr/local/www/nginx-dist;
        }

        proxy_read_timeout  900;
        client_header_timeout  10m;
	client_body_timeout    10m;
	send_timeout           10m;
    }
}

Обратите внимание на строчки
access_log  /var/log/nginx/$host-access.log;
error_log   /var/log/nginx/$host-error.log error;

Для каждого виртуального хоста нормально создается свой отдельный файл вида
www.blabla.com-access_log
а вот ошибки все пишутся в один файл, который так и называется
$host-error.log
То есть в строчке error_log не берется значение переменной $host. Пробовал вместо нее именованный вызов $domain, результат такой же. Помогите, пожалуйста, разобраться.
  • Вопрос задан
  • 5512 просмотров
Решения вопроса 1
@Csus4 Автор вопроса
В общем, нагуглил, что это невозможно.
trac.nginx.org/nginx/ticket/57
=(
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
alekciy
@alekciy
Вёбных дел мастер
А если задать:
error_log /var/log/nginx/$host.log error;
?
Ответ написан
kuroneco
@kuroneco
Системный администратор
1. Можете извратится вручную.
2. Можете отправлять на syslog, а syslog уже сам рассортирует по имени.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы