修改NGINX运行进程user

我在 移动云架构 中,会使用 Sphinx文档 来撰写本书。为了能够观察修订效果,我启动一个 Nginx 来提供 Web Atlas 。这里就遇到一个问题:

个人用户的工作目录(文档撰写目录)位于 /home/huatai/docs 之下,个人用户目录无法被其他普通用户所读取。而NGINX出于安全原因,是不会使用 root 用户身份运行程序进程,默认使用 www 用户身份。这导致无法展示文档html。

解决方法是修订 /etc/nginx/nginx.conf 配置,默认这个配置中有一行被注释掉的:

#user http;

那么将这行修改成:

user huatai;

是否就可以呢?

不行!

启动 systemctl start nginx 会失败,执行 systemctl status nginx 可以看到提示报错:

Nov 02 11:30:24 alarm systemd[1]: Starting A high performance web server and a reverse proxy server...
Nov 02 11:30:24 alarm nginx[17057]: 2022/11/02 11:30:24 [emerg] 17057#17057: getgrnam("huatai") failed in /etc/nginx/nginx.conf:3
Nov 02 11:30:24 alarm systemd[1]: nginx.service: Control process exited, code=exited, status=1/FAILURE
Nov 02 11:30:24 alarm systemd[1]: nginx.service: Failed with result 'exit-code'.
Nov 02 11:30:24 alarm systemd[1]: Failed to start A high performance web server and a reverse proxy server.

原来在 /etc/nginx/nginx.conf 中隐含的运行进程的用户设置格式是:

user <user> <group>;

但是如果没有提供 <group> 信息,则NGINX默认认为 <user><group> 是一致的,也就是配置:

user huatai;

会导致NGINX认为运行进程的group也是 huatai

而我这里恰好 huatai 用户的group是 staff ,系统并没有 huatai 这个组。这也就是导致NGINX启动报错 getgrnam("huatai") failed in /etc/nginx/nginx.conf:3 原因。

修正为:

user huatai staff;

再次重启NGINX,则工作正常了

参考