自定义nginx配置变量未扩展

前端之家收集整理的这篇文章主要介绍了自定义nginx配置变量未扩展前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我正在运行Nginx版本1.2.8.

以下配置中的$log和$elog似乎没有扩展,因此没有记录任何内容.这是问题,我怎样才能让它们扩展?

Nginx配置:

  1. server {
  2. listen xx.xx.xx.xx:80 default;
  3. server_name domain.com;
  4. set $docroot /home/domain.com/public_html;
  5. set $log /home/domain.com/logs/access_log;
  6. set $elog /home/domain.com/logs/error_log;
  7. root $docroot;
  8. error_log $elog;
  9. include /etc/Nginx/http-backend.conf;
  10. }

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

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

UPD:感谢Valery Viktorovsky我通过更改日志文件夹的权限来解决这个问题.

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

提到的解决方法略有修改,也已应用.没有它,即使拥有正确的权限,它也无法运行. $log和$elog的值保持不变,但是添加了斜杠.

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

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

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

  1. /home/*/logs/*_log {
  2. missingok
  3. notifempty
  4. weekly
  5. minsize 50M
  6. compress
  7. rotate 60
  8. sharedscripts
  9. postrotate
  10. /sbin/service Nginx reload > /dev/null 2>/dev/null || true
  11. /sbin/service httpd reload > /dev/null 2>/dev/null || true
  12. chown -R apache.root /home/*/logs/ > /dev/null 2>/dev/null || true
  13. chmod -R 750 /home/*/logs/ > /dev/null 2>/dev/null || true
  14. endscript
  15. }
最佳答案
Nginx worker必须有权在/home/domain.com/logs中创建文件

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

您也可以使用小型解决方法

  1. server {
  2. set $log 'home/domain.com/logs/access_log';
  3. access_log /$log;
  4. }

猜你在找的Nginx相关文章