非root用户启动nginx

背景:

公司服务器申请root权限一般会比较麻烦。所以希望能以公共账号(普通用户)来启动nginx,方便后续运维。

nginx启动进程可以在/etc/nginx/nginx.conf中,指定user (user www-data), 但是这个只有在root用户启动的情况才有意义,启动之后,master process还是root用户的,并不能满足我们的需求 。

我们需要能用非root用户启动nginx master process

做法如下:
  1. 注释掉/etc/nginx/nginx.conf的:user www-data 这行
  2. 此时用普通用户执行 /usr/sbin/nginx -t测试配置,报如下错误nginx: [emerg] open() "/var/run/nginx.pid" failed (13: Permission denied)
  3. 直接在/etc/nginx/目录下, 执行mkdir pid新建目录,修改/etc/nginx/nginx.conf的: pid /run/nginx/nginx.pidpid /etc/nginx/pid/nginx.pid
  4. 修改相关文件夹/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显示的文件夹全改成普通用户了