以下是我在/etc/nginx/nginx.conf
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
)。
为什么它会尝试访问另一个错误日志文件?
答案 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