Может ли путь Nginx access_log принимать переменную?

Я хочу поместить переменную $host в путь к файлу Nginx access_log:

http {
   log_format compression '$remote_addr - $remote_user [$time_local] '
                       '"$request" $status $body_bytes_sent '
                       '"$http_referer" "$http_user_agent" 
   "$gzip_ratio"';

 server {
     gzip on;
     access_log /var/logs/$host.access.log compression;
 }
}

На основе документа Nginx: http://nginx.org/en/docs/http/ngx_http_log_module.html, $host является встроенной переменной и должна работать в пути к журналу. Однако в моем случае это не работает. Может ли кто-нибудь дать несколько советов здесь? Моя версия Nginx 1.10. Спасибо


person michelle    schedule 15.11.2018    source источник


Ответы (3)


возможно, не поддерживает, это результат теста

[root@l nginx.d]# nginx -s quit
[root@l nginx.d]# nginx 
[root@l nginx.d]# ls /var/log/nginx/
access.log  error.log  ${host}.log  $host.log  $server_name.log
[root@l nginx.d]# cat cms.0.dev.q.com.on 
server{

    server_name
        cms.0.dev.q.com 
        cms-0.dev.q.com 
        ;

    error_log /var/log/nginx/${host}.log warn;
    access_log /var/log/nginx/$server_name.log;
person qidizi    schedule 12.01.2021

Согласно документам nginx, при использовании переменной в имени буферизованная запись не работает, а сжатие gzip — это буферизованная запись. Таким образом, вы можете включить переменную или gzip, но, к сожалению, не то и другое одновременно.

person demonbane    schedule 26.04.2021

Попробуйте сначала установить параметр server_name. Также посмотрите на этот рабочий пример:

server {
            if ($host ~* www\.(.*)) {
                    set $host_without_www $1;
                    rewrite ^(.*)$ http://$host_without_www$1/ permanent;
            }
            server_name_in_redirect off; #or folders like /awstats will redirect to _
            listen 80;
            server_name _;
            access_log      /var/log/nginx/$host.access_log main;
            error_log      /var/log/nginx/$host.access_log info;
            root /var/www/$host/htdocs;
            location ~ \.php$ {
                    include /etc/nginx/fastcgi_params;
                    fastcgi_pass  127.0.0.1:1026;
                    fastcgi_index index.php;
            }
    #For WP
            if (!-e $request_filename) {
                    rewrite ^(.+)$ /index.php?q=$1 last;
            }
    }
person Andrey Starkov    schedule 15.11.2018