Nginx版本:
1.19.6(mainline version)
看官若是觉得满意,就请酌情打个赏呗 (^_^)
问题背景:
之前帮客户现场搭建了一套Nginx软负载,按照惯例,为Nginx服务配置了403、404错误代码的自定义返回页面。但是,访问测试发现无论是403、还是404错误码,返回的页面都是Nginx自定义的403错误页面,而本地自定义的403.html、404.html页面始终访问不到。
报错信息:
2021/01/04 14:01:04 [error] 27729#0: *6 open() "/xxx/nginx/html/403.html" failed (13: Permission denied), client: 10.xxx.xxx.xxx, server: 10.xxx.xxx.xxx, request: "GET / HTTP/1.1", host: "10.xxx.xxx.xxx"
排查过程:
第一步,修改html目录的权限为755,修改html目录下的html页面文件的权限为644后,测试针对403、404错误码返回页面,都是nginx自定义的。这显然不是我所期望的结果!
第二步,检查Nginx进程的用户,发现worker process的用户为noboby,因此怀疑是不是worker进程没有权限访问html目录下的文件,因为那些html文件的用户和组都是root。
nobody 16xx1 29xx1 0 08:23 ? 00:00:00 nginx: worker process
nobody 16xx2 29xx1 0 08:23 ? 00:00:00 nginx: worker process
nobody 16xx3 29xx1 0 08:23 ? 00:00:00 nginx: worker process
nobody 16xx4 29xx1 0 08:23 ? 00:00:00 nginx: worker process
root 29xx1 1 0 Jan07 ? 00:00:00 nginx: master process ../sbin/nginx
第三步,修改nginx.conf配置文件,将 #user nobody 修改为 user root,然后reload配置(worker process的用户变为root),再次测试,发现自定义的403、404错误页面可以正常访问和显示了。如下:
存在的疑问:
让我感觉到疑惑和不解的是,上面的这个问题在nginx 1.17.2版本上并未出现,也就是说Nginx 1.17.2版本中启动的 worker process 虽然是以 nobody 用户启动和运行的,但是就可以正常访问用户自定义的403、404错误页面。因此,我个人怀疑这个问题可能与Nginx的版本有关。
如果Nginx 1.17.2版本worker process可以以nobody用户访问自定义的错误页面是正常的,那就说明1.19.6版本出Bug了;
如果上面所述的情况不正常,那就说明Nginx 1.17.2版本存在垮权限访问的Bug,而Nginx 1.19.6版本修复了这个Bug。
看官觉得满意,请酌情打个赏呗(^_^)