访问Nginx出现状态码为403 forbidden原因及故障模拟


1)nginx配置文件里不配置默认首页参数或者首页文件在站点目录下没有index index.php index.html index.htm;

问题模拟示例(版本不通用)

[root@www extra]# cat www.conf

#www virtualhost by oldboy

  server {

      listen       80;

       server_name www.etiantian.org;

      location / {

          root   html/www;

          #index  index.htmlindex.htm;#<==注释首页文件配置

      }

      access_log off;

   }

[root@www extra]# ../../sbin/nginx -sreload

[root@www extra]# tail -1 /etc/hosts

10.0.0.8 www.etiantian.orgbbs.etiantian.orgblog.etiantian.org etiantian.org

[root@www extra]# ll ../../html/www/                  

总用量 12

drwxr-xr-x 2 root root 4096 4 15 14:20 blog

-rw-r--r-- 1 root root    4 4  17 17:11index.html #<==存在首页文件

drwxr-xr-x 2 root root 4096 4 15 14:19 oldboy

[root@www extra]# curl -I -s10.0.0.8|head-1

HTTP/1.1 403 Forbidden #<==问题是Nginx没有指定首页文件的参数,因此访问Nginx时不会把index.html当首页,所以报403错误


2)站点目录下没有配置文件里指定的首页文件index.php index.html index.htm

[root@www extra]# cat www.conf

#www virtualhost by oldboy

  server {

      listen       80;

       server_name www.etiantian.org;

      location / {

          root   html/www;

          index  index.htmlindex.htm;#<==配置首页文件配置

      }

      access_log off;

   }

[root@www extra]# ../../sbin/nginx -sreload

[root@www extra]# rm -f../../html/www/index.html#<==删除物理首页文件

[root@www extra]# curl -I -s10.0.0.8|head-1

HTTP/1.1 403 Forbidden


提示:以上1)2)有一个参数可以解决这个问题就是:

autoindex on;

[root@www extra]# cat www.conf

#www virtualhost by oldboy

   server{

      listen       80;

      server_name  www.etiantian.org;

      location / {

          root   html/www;

          autoindex on; #<==当找不到首页文件时,会展示目录结构,这个功能一般不要用除非有需求(无用)。

      }

      access_log off;

   }


3)站点目录或内部的程序文件没有Nginx用户访问权限

[root@www extra]# echo test>../../html/www/index.html

[root@www extra]# chmod700../../html/www/index.html #<==设置700nginx用户无权读取

[root@www extra]# ls -l../../html/www/index.html

-rwx------ 1 root root 5 4 17 17:15../../html/www/index.html

[root@www extra]# curl -I -s10.0.0.8|head-1

HTTP/1.1 403 Forbidden #<==403错误

[root@www extra]# chmod755../../html/www/index.html #<==设置755nginx用户有权读取

[root@www extra]# curl -I -s10.0.0.8|head-1

HTTP/1.1 200 OK #<==200 OK


4)Nginx配置文件中设置allowdeny等权限控制,导致客户端没有没权限访问

[root@www extra]# cat www.conf

#www virtualhost by oldboy

  server {

      listen       80;

      server_name  www.etiantian.org;

      location / {

          root   html/www;

          index  index.html index.htm;

          allow 192.168.1.0/24;

          deny all;

      }

      access_log off;

   }

[root@www extra]# curl -I -s10.0.0.8|head-1

HTTP/1.1 200 OK #<==设置755nginx用户有权读取

[root@www extra]# ../../sbin/nginx -sreload

[root@www extra]# curl -I -s 10.0.0.8|head-1

HTTP/1.1 403 Forbidden

 

403状态码出现原因总结:

01.服务端阻止客户端访问

02.服务端站点目录中没有指定的首页文件信息

 

提示:上述403问题并不是nginx才有,apache服务的Forbidden 403问题同样也是这几个问题导致的,只是参数细节略有区别而已

 

 

转载自http://oldboy.blog.51cto.com/2561410/1633952