如何关闭或指定nginx错误日志位置?
我自己在Ubuntu上编译了nginx。 我用-c nginx.conf参数启动我的nginx。 在我的nginx.conf文件中,我尝试使用关闭错误日志,但失败如何关闭或指定nginx错误日志位置?,nginx,Nginx,我自己在Ubuntu上编译了nginx。 我用-c nginx.conf参数启动我的nginx。 在我的nginx.conf文件中,我尝试使用关闭错误日志,但失败 error_log /dev/null crit; 仍然收到错误消息: nginx:[警报]无法打开错误日志文件:open()“/usr/nginx/logs/error.log”失败(2:没有此类文件或目录) 如何关闭此日志或更改其位置 禁用错误日志的语法正常,但在读取配置之前使用默认日志文件的状态。(这似乎是合理的,因为它如何告
error_log /dev/null crit;
仍然收到错误消息:
nginx:[警报]无法打开错误日志文件:open()“/usr/nginx/logs/error.log”失败(2:没有此类文件或目录)
如何关闭此日志或更改其位置 禁用错误日志的语法正常,但在读取配置之前使用默认日志文件的状态。(这似乎是合理的,因为它如何告诉您配置中有错误)
尝试使用运行nginx的用户的正确权限手动创建此文件。或者尝试以root用户身份启动服务器。我在启动nginx时使用-p参数解决了此问题,例如:
/home/ubuntu/nginx/sbin/nginx -c /home/ubuntu/nginx/conf/nginx.conf -p /home/ubuntu/nginx
这将在配置中指定的任何日志路径前面加上前缀目录。您无法通过指定
-p
前缀来解决此问题;因为这只适用于配置文件中的指令;正如RickyA已经指出的那样,问题是nginx甚至在打开配置之前就想打开一个编译错误日志。由于显而易见的原因,更改在错误日志中编译的权限并不理想
解决方法是在命令行上将错误日志指定为配置:
$ nginx -p . -g 'error_log error.log;'
或
您仍然会收到[alert],但至少它允许我在Ubuntu上以非root用户身份启动nginx。我刚刚通过使用以下配置参数解决了这个问题:
./configure --prefix="$HOME/nginx" --error-log-path=/dev/stderr
由于我从未将此nginx用作守护进程,并且总是在shell中运行它,因此它将错误记录到stderr是有意义的。Per(下面引用的摘录),%%ERROR\u log\u PATH%%
被设置为编译选项,并在启动时立即检查,导致“无法打开”警报。指定前缀(使用-p
)可能有助于抑制警报,但前提是编译时将%%错误\u日志\u路径%%
指定为相对路径
您可以使用检查它在当前可执行文件中的指定方式
nginx-v2>&1 | grep-oE“错误日志路径=\S*”
这就是为什么@Michael提出的解决方案对某些人有效,但对其他人无效
参见变更日志:
与nginx 0.7.53的更改
*)更改:现在,将从
启动
*)功能:现在启动错误和警告输出到
日志和标准错误
现在在错误中编译\u日志值始终用于在开始时记录错误
时间(如果nginx无法打开,则发出警告)。一次配置文件
已读取-将使用配置中的错误日志
如果您编译nginx时出现了相对于前缀的错误\u日志路径
-应该可以通过-p覆盖启动错误日志
开关
马克西姆·杜宁
不需要使用命令行参数。只需确保将error_log指令添加到nginx.conf的最顶端,或者至少在出现任何错误消息之前添加
nh2在2016年1月发表的评论表明,该选项至少在几年前就可以使用了。我可以确认它的工作,它的麻烦少。对nginx.conf的自定义与其他选项相比,不太可能导致打包nginx安装的更新出现问题。您是否尝试删除
错误日志
声明(您的行)?:)我刚才试过了,只使用了access\u log,但还是收到了错误消息。我没有创建文件夹:/home/dist/carrier/nginx/logs。重新启动nginx:nginx:[警报]无法打开错误日志文件:open()“/home/dist/carrier/nginx/logs/error.log”失败(2:没有这样的文件或目录我就是这么做的。编译nginx时使用--prefix设置正确的日志位置,并在安装nginx服务时创建文件夹。$sudo chmod a+w/var/log/nginx/access.log/var/log/nginx/error.log
应该会有帮助,但从源代码编译nginx似乎更可行。仍然无法访问ss it.Ichown
'd towww-data:www-data
但这也没有帮助。文件应该属于哪个用户和组?在几乎所有情况下,chmod a+w
都是一个坏主意。确保错误日志
设置在nginx配置的顶层(即使在http
块日志之外)。您仍然会收到nginx:[警报]无法打开错误日志文件:open()“/usr/nginx/logs/error.log”
,但[alert]
不是严重错误,您的服务器仍将启动。请尝试使用nginx 1.4。前缀解决方案对我有效:)我已将前缀目录更改为具有写入权限的目录!谢谢!您无需设置-p
即可使其正常工作。但请确保在nginx配置的顶层设置了错误日志。您仍将获得nginx:[警报]无法打开错误日志文件:open()“/usr/nginx/logs/error.log”
,但[alert]
不是一个严重错误,您的服务器无论如何都会启动。使用nginx 1.4进行了尝试。看起来-p
选项在较旧的版本中无法完全工作;在1.12.2中。(或者,这可能是基于@Randall答案的差异)---p.s.@nh2:可能[alert]
并不重要,但我觉得养成忽视这些东西的习惯是一种不好的做法,因此最好有一种方法永远不要排放这些东西。(至少1.12.2是这样。)@lindes哦,是的,当然。干净的解决方案更好。越少[提醒]
您已经出现,调试东西所需阅读的内容就越少。这对于以非根用户身份正确运行nginx-t
也是有效的/必要的(无需重新编译)。如果不执行类似nginx-t-g“error\u log stderr;”之类的操作,测试将总是在没有根用户的情况下失败。
./configure --prefix="$HOME/nginx" --error-log-path=/dev/stderr