nginx进程所属用户问题讨论
阅读原文时间:2023年07月08日阅读:1

结论

1,在非root账户下启动时,nignx的master和worker进程的用户都将是这个账户,

2,在root账户下启动时 nignx的master进程是用户是root,worker的用户在conf已配置用户的情况下,owner是配置的用户,否则将是nobody,而且也可能导致nginx的一些文件的owner也是nobody。

问题探讨

A主机安装NFS server,共享出来某些目录给B主机使用

A主机中的配置

/usr/local/nginx/html/ *(insecure,rw,sync,no_root_squash)

B主机安装有NFS clinet 和nginx,还有其他应用

B主机挂载A主机提供的共享目录

mount -t nfs -o nolock,vers=4 10.0.0.243:/usr/local/nginx/html/ /usr/java/tomcat-7.0.92/webapps/ROOT/kjactive/appimg

B主机安装的nginx,配置文件中关于用户的配置是注释状态

#user  nobody;

进程用户如下:

root      12345      1  0 Jan17 ?        00:00:00 nginx: master process ./nginx
nobody   755782  12345  0 Jun23 ?        00:02:26 nginx: worker process
nobody   755783  12345  0 Jun23 ?        00:28:39 nginx: worker process

B主机上安装有后台应用,通过B主机上的nginx可以正常访问,然后在后台上传图片,实际存储到A主机的共享目录下,存储的图片权限是:

-rw-r----- 1 root root  21126 Jul  6 16:43 202107061643095807470.png

但是通过nginx却无法访问图片,提示:403 无权限

分析

使用root用户启动的nginx,但是nginx配置文件中关于user 的配置是注释状态,这样的情况正好对应开头的结论2。master进程的用户是root,但是worker进程用户是nobody,再联想到上传的图片权限是"-rw-r-----",那肯定就无法访问图片了。

解决办法也是根据结论2,修改nginx配置文件中关于user的配置,修改成:user root;,这样一来,master进程和worker进程的用户都是root,这样就能访问到图片了。

root      12345      1  0 Jan17 ?        00:00:00 nginx: master process ./nginx
root     605188  12345  0 16:50 ?        00:00:01 nginx: worker process
root     605189  12345  0 16:50 ?        00:00:00 nginx: worker process