【Nginx】Nginx报open() failed (13: Permission denied)解决过程(原创)

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。

       看官觉得满意,请酌情打个赏呗(^_^)

       


版权声明:本文为cnskylee原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。