有可能configurationnginx输出错误日志指定部分的文件path吗? 铁:
2017/09/16 19:59:28 [error] 10656#10656: *1702 open() "/home/user/www/favicon.ico" failed (2: No such file or directory), client: 256.256.256.256, server: example.com, request: "GET /favicon.ico HTTP/1.1", host: "example.com", referrer: "http://example.com/"
用户在“/ home / user /”上有chroot,所以这个用户的“favicon.ico”有这个path:“/www/favicon.ico”。 文件的真实path有点混乱。
这个错误信息由PHP FastCGI服务器输出。 要使用相对于chroot的path,请在chroot中运行FastCGI服务器。 (这也将沙箱的PHP脚本,这可能是一件好事!)
您可以在访问日志中报告缺less的URI,而不报告错误日志中缺less的path名。
例如:
try_files $uri $uri/ =404;
除了logging缺less的URI之外,上面的语句应该使nginx的行为几乎与其默认行为相同。
请参阅此文档了解更多
如果有人会有类似的问题,这是我解决它(它不能被标记为正确的问题,因为这是一个解决方法):
inotifywait -m -e modify --format "%w%f" /home/user/log/nginx/example.com.error.log | while read f; do if [[ $(grep "/home/user" $f | wc -c) != 0 ]] ; then sed 's/\/home\/user//g' $f > $f\t ; cat $f\t > $f ; fi done
inotifywait (inotify-tools软件包)是监视器模式下的文件监视器,在修改文件时触发:
inotifywait -m -e modify --format "%w%f"
然后,在一个while循环中,我们需要运行2个命令,但首先检查文件的新修改是否包含特定的string,以避免在无限循环中堆栈:
if [[ $(grep "/home/user" $f | wc -c) != 0 ]]
如果命令grep“/ home / user”$ f的结果在string!= 0的平均长度的wc -c中传递,则通过将所有/ home / userreplace为0长度string来修改文件// ,将输出保存在临时文件,并最终从临时文件写入nginx错误日志文件cat $ f \ t> $ f
sed 's/\/home\/user//g' $f > $f\t; cat $f\t > $f;done