Nginx access_log的路径可以采用变量吗?

时间:2018-11-15 05:54:33

标签: nginx nginx-location nginx-config

我想将变量$ 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 doc:http://nginx.org/en/docs/http/ngx_http_log_module.html,$ host是嵌入式变量,应在日志路径中工作。但是,对于我而言,它不起作用。有人可以在这里提供一些提示吗?我的Nginx版本是1.10。谢谢

3 个答案:

答案 0 :(得分:0)

尝试首先设置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;
            }
    }

答案 1 :(得分:0)

可能不支持,即测试结果

[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;

答案 2 :(得分:0)

根据 nginx 文档,在名称中使用变量时,缓冲写入不起作用,而 gzip 压缩是缓冲写入。所以你可以有一个变量或 gzip,但不幸的是不能同时使用。