我正在运行 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;
}