如何消除 nginx 警告消息 nginx: [alert] 无法打开错误日志文件: open() "/var/log/nginx/error.log" 失败 (13: 权限被拒绝)

gac*_*opu 4 nginx

我使用普通用户而不是 root 运行 nginx。我在系统范围内安装了 nginx,但在 HOME 中有 nginx.conf。

$HOME/nginx/nginx.conf

worker_processes  1;
error_log  /home/worker/nginx/log/nginx/error.log warn;
pid        /home/worker/nginx/run/nginx.pid;
events {
  worker_connections  1024;
}
http {
  include      /etc/nginx/mime.types;
  default_type application/octet-stream;
  access_log   /home/worker/nginx/log/nginx/access.log;
  server {
    listen 8080;
    root /home/worker/nginx/data;
  }
}
Run Code Online (Sandbox Code Playgroud)

启动nginx

$ nginx -c /home/worker/nginx/nginx.conf
nginx: [alert] could not open error log file: open() "/var/log/nginx/error.log" failed (13: Permission denied)
Run Code Online (Sandbox Code Playgroud)

正如你在 nginx.conf 中看到的,我已经定义了error_log,但我仍然收到警告消息:

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

nginx本身可以工作,只是想删除这个警告消息,我该怎么做?

小智 5

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

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


小智 5

我参加聚会迟到了,但我遇到这个问题还有另一个原因。我只是添加了 nginx 的文件夹和文件的访问权限(www-data在我的例子中是用户):

sudo chown -R www-data:www-data /var/log/nginx
Run Code Online (Sandbox Code Playgroud)

我实际上已经删除了整个文件夹和日志文件并重新创建了它们:

sudo rm -rf /var/log/nginx
sudo mkdir /var/log/nginx
sudo touch /var/log/nginx/error.log
sudo chown -R www-data:www-data /var/log/nginx
Run Code Online (Sandbox Code Playgroud)

也许有一个更优雅的解决方案。