自定义 nginx 配置变量未扩展

自定义 nginx 配置变量未扩展

我正在运行 nginx 版本 1.2.8。

似乎以下配置中的$log$elog未展开,因此未记录任何内容。这是问题所在吗?我该如何让它们展开?

nginx配置:

server {
    listen              xx.xx.xx.xx:80 default;
    server_name         domain.com;
    set                 $docroot                /home/domain.com/public_html;
    set                 $log                    /home/domain.com/logs/access_log;
    set                 $elog                   /home/domain.com/logs/error_log;
    root                $docroot;
    error_log           $elog;
    include             /etc/nginx/http-backend.conf;

}

/etc/nginx/http-backend.conf 配置:

.....
location ~* ^.+\.(jpg|jpeg|gif|png|svg|css|mp3|ogg|mpe?g|avi|zip|gz|bz2?|rar|ico|swf|txt|tgz|tbz|pdfpls|torrent)$ {
    root                $docroot;
    try_files           $uri @fallback;
    access_log          $log            main;
    error_log           $elog;
    expires             30d;
    add_header          Pragma          "public";
    add_header          Cache-Control   "public";
#    error_page         404 = @fallback;
}
.....

UPD:感谢瓦列里·维克托罗夫斯基我通过更改日志文件夹的权限解决了这个问题。

chown -R apache.root /home/*/logs/
chmod -R 750 /home/*/logs/

提到的解决方法也已应用,但略作修改。没有它,即使有正确的权限,它也无法工作。$log和的值$elog保持不变,但添加了斜线。

更新 /etc/nginx/http-backend.conf 配置:

.....
location ~* ^.+\.(jpg|jpeg|gif|png|svg|css|mp3|ogg|mpe?g|avi|zip|gz|bz2?|rar|ico|swf|txt|tgz|tbz|pdfpls|torrent)$ {
    root                $docroot;
    try_files           $uri @fallback;
#    access_log          $log            main;
#    error_log           $elog;
    access_log          /$log            main;
    error_log           /$elog;
    expires             30d;
    add_header          Pragma          "public";
    add_header          Cache-Control   "public";
#    error_page         404 = @fallback;
}
.....

仍然存在问题,因为 apache 使用 root 所有者创建日志文件。为了部分解决此问题,已将相同的命令添加到 logrotate 配置中:

/home/*/logs/*_log {
    missingok
    notifempty
    weekly
    minsize 50M
    compress
    rotate 60
    sharedscripts
    postrotate
        /sbin/service nginx reload > /dev/null 2>/dev/null || true
        /sbin/service httpd reload > /dev/null 2>/dev/null || true
        chown -R apache.root /home/*/logs/ > /dev/null 2>/dev/null || true
        chmod -R 750 /home/*/logs/ > /dev/null 2>/dev/null || true
    endscript
}

答案1

nginx 工作者必须有权限在 /home/domain.com/logs 中创建文件

因此检查 /home/domain.com/logs 目录的权限。

您也可以使用一些小的解决方法:

server {
    set        $log                    'home/domain.com/logs/access_log';
    access_log  /$log;
}

相关内容