如何使用 nginx 配置中的变量为 NGINX 提供一些路径?

如何使用 nginx 配置中的变量为 NGINX 提供一些路径?

我想创建动态子域,并在单独的目录中设置日志,但是遇到了一个问题:

  1. /var/www/demo/subdomains/$sub/logs/access.log如果我提供类似错误日志的路径,NGINX 会写入/var/www/demo/subdomains/$sub/logs/error.log" failed (2: No such file or directory)
  2. 如果我现在提供类似配置中的路径,则/var/www/demo/subdomains/logs/$sub-error.log存在一个问题,该路径的$sub-access.log命名正确,如demo1-access.logdemo2-acces.log,但$sub-error.log命名却恰好为$sub-error.log。对于 2 个域,我有 3 个文件 - demo1-access.logdemo2-access.log$sub-error.log

我需要做哪些更改才能使第一种方法有效?第二种方法也很好,但不太美观。

server {
    listen 80;
    listen [::]:80;

    server_name "~^(?<sub>.+)\.deb\.test$";
    root /var/www/demo/subdomains/$sub/www;
    index index.php index.html;

    access_log /var/www/demo/subdomains/logs/$sub-access.log combined;
    error_log /var/www/demo/subdomains/logs/$sub-error.log info;

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
        fastcgi_param SCRIPT_FLIENAME $document_root@fastcgi_script_name;
        include /etc/nginx/fastcgi.conf;
    }

    location / {
        try_files $uri $uri/ /index.php?$args;
    }

    location ~* /(images|cache|media|logs|tmp)/.*\.(php|pl|py|jsp|asp|sh|cgi)$ {
        return 403;
        error_page 403 /403_error.html;
    }

    location ~* \.(ico|pdf|flv)$ {
        expires 1y;
    }

    location ~* \.(js|css|png|jpg|jpeg|gif|swf|xml|txt)$ {
        expires 14d;
    }

    location ~ /\.ht {
        deny all;
    }
}

使用 error_log 指令添加一个服务器块的工作原理相同:

server {
        listen 80;
        listen [::]:80;
        server_name "~^(?<sub>.+)\.deb\.test$";
        error_log /var/www/demo/subdomains/logs/$sub-error.log info;
}

答案1

可以在access_log指令中使用变量(但有一些限制),但不能在error_log指令中使用变量。要将错误记录到另一个文件,您需要使用不同的error_log指令,可能在新的server块中。

相关内容