即使我在重新加载时设置了nginx配置文件,Nginx仍会尝试打开默认错误日志文件

时间:2015-12-14 02:29:34

标签: linux nginx config

以下是我在/etc/nginx/nginx.conf

中的nginx配置文件
user Foo;
worker_processes 1;

error_log /home/Foo/log/nginx/error.log;
pid /home/Foo/run/nginx.pid;

events {
    worker_connections 1024;
    use epoll;
}

http {
    access_log /home/Foo/log/nginx/access.log;

    server {
        listen 80;

        location = / {
            proxy_pass http://192.168.0.16:9999;
        }
    }
}

如您所见,我将日志,pid文件位置更改为主目录。

当我重新启动Linux它似乎工作时,Nginx会在我设置的文件和pid文件中记录错误日志。

但是,当它尝试nginx -s reload或其他时,它会尝试打开其他错误日志文件。

nginx: [alert] could not open error log file: open() "/var/log/nginx/error.log" failed (13: Permission denied)
2015/12/14 11:23:54 [warn] 3356#0: the "user" directive makes sense only if the master process runs with super-user privileges, ignored in /etc/nginx/nginx.conf:1
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
2015/12/14 11:23:54 [emerg] 3356#0: open() "/home/Foo/run/nginx.pid" failed (13: Permission denied)
nginx: configuration file /etc/nginx/nginx.conf test failed

我知道,我可以使用sudo解决权限错误,但此处的主要问题是Nginx尝试打开的错误日志文件(/var/log/nginx/error.log)。

为什么它会尝试访问另一个错误日志文件?

7 个答案:

答案 0 :(得分:5)

这已经老了...但我经历了同样的痛苦,这是我的解决方案。

正如您所看到的,日志是警报,而不是阻止错误:

nginx: [alert] could not open error log file: open() "/var/log/nginx/error.log" failed (13: Permission denied)

这应该不是问题:) Nginx只是想在启动时检查该文件......

只需使用-p选项即可。这样在本地启动Nginx的工作对我来说很有用:

nginx -c /etc/nginx/nginx.conf -g 'daemon off;' -p /home/Foo/log/nginx

答案 1 :(得分:4)

检查目录/ home / Foo / log / nginx /上的权限。它必须是nginx可写的。像这样设置权限:

sudo chmod 766 /home/Foo/log/nginx

答案 2 :(得分:2)

您可能需要使用sudo

触发它
sudo nginx -t

答案 3 :(得分:0)

是的,Nginx只喜欢在启动时检查该文件。我将nginx的安装目录复制到另一个位置,然后启动它,而新Nginx的pid仍然在旧位置。因此,我建议您删除旧目录。

答案 4 :(得分:0)

这个简单的答案是使用sudo。

所以当我使用sudo nginx -t

一切都很好。

顺便说一句,当我在Ubuntu 18.04上增加PHP.INI中的文件上传限制时,这对我来说是错误的原因,而我在测试时重新启动了PHP和NGINX:

2020/10/19 20:27:43 [warn] 1317#1317: the "user" directive makes sense only if the master process runs with super-user privileges, ignored in /etc/nginx/nginx.conf:1
2020/10/19 20:27:43 [emerg] 1317#1317: BIO_new_file("/etc/letsencrypt/live/websitename.com/fullchain.pem") failed (SSL: error:0200100D:system library:fopen:Permission denied:fopen('/etc/letsencrypt/live/websitename.com/fullchain.pem','r') error:2006D002:BIO routines:BIO_new_file:system lib)
nginx: configuration file /etc/nginx/nginx.conf test failed

答案 5 :(得分:0)

警报来自nginx初始化过程,该警报检查它是否可以写入使用--error-log-path configure标志编译的错误日志路径。这是在nginx甚至没有查看您的配置文件之前发生的,因此无论您写什么内容都没关系。

最近(2020-11-19),在nginx中添加了一个-e选项,使您可以覆盖已编译的错误日志路径。您可以使用该选项将nginx指向用户-可写文件(或stderr)。

请参见https://trac.nginx.org/nginx/changeset/f18db38a9826a9239feea43c95515bac4e343c59/nginx

答案 6 :(得分:-1)

或者使用sudo重新加载nginx

sudo nginx -s reload