非root用户启动nginx
背景:
公司服务器申请root权限一般会比较麻烦。所以希望能以公共账号(普通用户)来启动nginx,方便后续运维。
nginx启动进程可以在/etc/nginx/nginx.conf中,指定user (user www-data), 但是这个只有在root用户启动的情况才有意义,启动之后,master process还是root用户的,并不能满足我们的需求 。
我们需要能用非root用户启动nginx master process
做法如下:
- 注释掉
/etc/nginx/nginx.conf
的:user www-data
这行 - 此时用普通用户执行
/usr/sbin/nginx -t
测试配置,报如下错误nginx: [emerg] open() "/var/run/nginx.pid" failed (13: Permission denied)
- 直接在
/etc/nginx/
目录下, 执行mkdir pid
新建目录,修改/etc/nginx/nginx.conf
的:pid /run/nginx/nginx.pid
为pid /etc/nginx/pid/nginx.pid
- 修改相关文件夹
/etc/nginx
和/var/log/nginx
的权限。 如执行:chown -R user:usergroup /etc/nginx
此时,执行nginx -t
测试配置没问题,即可正常以普通用户启动nginx了
后续
运行一天后,发现部分有些页面的数据不能正常加载,排查发现response中返回的json被截断了
进一步排查,发现nginx错误日志中显示: open() "/var/lib/nginx/proxy/8/04/0000000048" failed (13: Permission denied)
解决:执行chown -R user:usergroup /var/lib/nginx
修改/var/lib/nginx/文件夹的权限。同时为稳妥起见,将whereis nginx
显示的文件夹全改成普通用户了