nginx以root启动时,如果配置文件中没有指定user指令,那么默认会设定user为nobody, 数字为65534。而如果使用非root用户启动,那么nginx则不处理用户,直接以当前用户启动worker进程。
nginx的启动过程中的函数ngx_init_cycle会调用函数ngx_create_paths创建临时文件目录。在创建目录后,也会对目录的属主进行处理。如果属主不同于user指令配置的用户,那么就会调用chown更改属主为user配置的用户。
在执行nginx -t时,nginx也会调用函数ngx_init_cycle, 也就是在执行nginx -t时也有可能更改临时目录的属主,从而导致在运行的nginx worker进程没有权限读取临时目录导致业务异常。
比如,以nginx用户启动nginx, 此时临时目录属主为nginx。
1 | nginx 273095 0.0 0.0 26788 384 ? Ss 10:11 0:00 nginx: master process ./sbin/nginx |
1 | [nginx@dev02 nginx]$ ls -l |