我正在运行nginx 1.2.8版本。
看来下面configuration中的$log和$elog没有展开,结果没有任何logging。 是这个问题,我怎样才能让他们扩大?
nginxconfiguration:
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.confconfiguration:
..... 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:感谢瓦列里Viktorovsky我解决这个通过更改权限到日志文件夹。
chown -R apache.root /home/*/logs/ chmod -R 750 /home/*/logs/
提到的解决方法,稍作修改,也已应用。 没有它,即使拥有正确的权限也不行。 $log和$elog保持不变,但斜杠被添加。
更新/etc/nginx/http-backend.confconfiguration:
..... 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创build拥有者根的日志文件。 为了部分解决这个问题,同样的命令已经被添加到logrotate config:
/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 }
nginx工作人员必须有权在/home/domain.com/logs中创build文件
因此请检查/home/domain.com/logs目录的权限。
你也可以使用小的解决方法:
server { set $log 'home/domain.com/logs/access_log'; access_log /$log; }