nginx.conf和nginx.pid用户和权限

ntk*_*tk4 5 pid nginx server

我在开始看我的NGINX的error.log文件的级别:警告......可能是一个愚蠢的想法,并会导致我崩溃我的服务器,因为我工作了任何错误发生,但嘿,我们是书呆子,这是为什么我们在这里

我每次重新启动服务器时都会注意到[warn]和[emerg]弹出窗口,显示:

[warn] 8041#0: the "user" directive makes sense only if the master process runs with super-user privileges, ignored in /etc/nginx/nginx.conf:1
[emerg] 8041#0: open() "/run/nginx.pid" failed (13: Permission denied)
Run Code Online (Sandbox Code Playgroud)

我的nginx.conf文件的顶部是:

user www-data;
worker_processes auto;
pid /run/nginx.pid;
Run Code Online (Sandbox Code Playgroud)

对我而言,向我展示了一些事情.

  1. 我和用户一起运行NGINX:www-data.
  2. 允许自动调整允许的工作进程数.
  3. 我的PID文件/信息存储在/run/nginx.pid中.

该错误告诉我NGINX没有访问/run/nginx.pid的权限,这使我看到了所述文件的用户权限.

sudo ls -la /run/nginx.pid
Run Code Online (Sandbox Code Playgroud)

揭示了:

-rw-r--r-- 1 root root 5 Jun 18 05:34 /run/nginx.pid
Run Code Online (Sandbox Code Playgroud)

然后尝试:

ps -ef | grep nginx
Run Code Online (Sandbox Code Playgroud)

生产:

root      5914     1  0 05:34 ?        00:00:00 nginx: master process /u
www-data  5917  5914  0 05:34 ?        00:00:00 nginx: worker process
Run Code Online (Sandbox Code Playgroud)

划痕头

现在,有人可以告诉我为什么,或者NGINX如何设法创建具有root所有权的主进程,现在工作进程是由www-data拥有的?

或者更重要的是,任何人都有一些关于如何应对这个[emerg]错误的建议?

我首先想到的是刚刚尝试和改变/run/nginx.pid文件的所有权,看看nginx怎么喜欢它,但我有种觉得,即使我这样做手工这一次,当我重新启动服务器,我我会遇到同样的问题.

我的第二个想法是,在NGINX中我可以在其他地方定义我的工作流程启动.

谢谢.

编辑

/etc/systemd/system/multi-user.target.wants/nginx.service文件的内容是:

[Unit]
Description=A high performance web server and a reverse proxy server
After=network.target

[Service]
Type=forking
PIDFile=/run/nginx.pid
ExecStartPre=/usr/sbin/nginx -t -q -g 'daemon on; master_process on;'
ExecStart=/usr/sbin/nginx -g 'daemon on; master_process on;'
ExecReload=/usr/sbin/nginx -g 'daemon on; master_process on;' -s reload
ExecStop=/usr/sbin/nginx -s quit

[Install]
WantedBy=multi-user.target
Run Code Online (Sandbox Code Playgroud)

小智 9

我今天在 Centos 7 服务器上遇到了同样的错误。

nginx.pid”失败(13:权限被拒绝)

对我来说,结果证明是 SELinux 的问题。我做了以下工作以使其再次工作:

systemctl stop nginx
touch /var/run/nginx.pid
chcon -u system_u -t httpd_var_run_t /var/run/nginx.pid
systemctl start nginx
Run Code Online (Sandbox Code Playgroud)

跑步

ls -Z nginx.pid
Run Code Online (Sandbox Code Playgroud)

应该输出

-rw-r--r--。root root system_u:object_r:httpd_var_run_t:s0 nginx.pid

  • 你是从哪个目录运行的?你的第三行引用了 `nginx.pid` 作为相对,但显然有一个 `/run/nginx.pid` 和一个 `/var/run/nginx.pid`。 (2认同)