Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何关闭或指定nginx错误日志位置?_Nginx - Fatal编程技术网

如何关闭或指定nginx错误日志位置?

如何关闭或指定nginx错误日志位置?,nginx,Nginx,我自己在Ubuntu上编译了nginx。 我用-c nginx.conf参数启动我的nginx。 在我的nginx.conf文件中,我尝试使用关闭错误日志,但失败 error_log /dev/null crit; 仍然收到错误消息: nginx:[警报]无法打开错误日志文件:open()“/usr/nginx/logs/error.log”失败(2:没有此类文件或目录) 如何关闭此日志或更改其位置 禁用错误日志的语法正常,但在读取配置之前使用默认日志文件的状态。(这似乎是合理的,因为它如何告

我自己在Ubuntu上编译了nginx。 我用-c nginx.conf参数启动我的nginx。 在我的nginx.conf文件中,我尝试使用关闭错误日志,但失败

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.I
chown
'd to
www-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