403问题并不是nginx才有,apache服务的Forbidden 403问题同样也是这几个问题导致的,只是参数细节略有区别而已。下面以nginx为例:
1、nginx配置文件里不配置默认首页参数或者在站点目录下没有首页文件
index index.php index.html index.htm;
问题模拟示例:
[root@web01 extra]# cat www.conf
#www virtualhost ceshi
server {
listen 80;
server_name www.etiantian.org;
location / {
root html/www;
#index index.html index.htm;#<==注释首页文件配置
}
access_log off;
}
[root@web01 extra]# /application/nginx/sbin/nginx -t
[root@web01 extra]# /application/nginx/sbin/nginx -s reload
[root@web01 extra]# tail -1 /etc/hosts
10.0.0.8 www.etiantian.orgbbs.etiantian.org blog.etiantian.org etiantian.org
[root@web01 extra]# ll ../../html/www/
总用量 4
-rw-r--r--. 1 root root 4 6月 8 13:03 index.html #<==存在首页文件
[root@web01 extra]# curl -I -s 10.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@web01 extra]# ../../sbin/nginx -sreload
[root@web01 extra]# rm -f ../../html/www/index.html #<==删除物理首页文件
[root@web01 extra]# curl -I -s 10.0.0.8|head -1
HTTP/1.1 403 Forbidden
提示:以上1、和2、有一个参数可以解决这个问题就是:
autoindex on;
[root@web01 extra]# cat www.conf
#www virtualhost by ceshi
server {
listen 80;
server_name www.etiantian.org;
location / {
root html/www;
autoindex on; #<==当找不到首页文件时,会展示目录结构,这个功能一般不要用除非有需求。
}
access_log off;
}
3、站点目录或内部的程序文件没有Nginx用户访问权限
[root@web01 extra]# echo test >../../html/www/index.html
[root@web01 extra]# chmod 700../../html/www/index.html #<==设置700让nginx用户无权读取
[root@web01 extra]# ls -l ../../html/www/index.html
-rwx------ 1 root root 5 4月 17 17:15../../html/www/index.html
[root@web01 extra]# curl -I -s 10.0.0.8|head -1
HTTP/1.1 403 Forbidden #<==403错误
[root@web01 extra]# chmod 755../../html/www/index.html #<==设置755让nginx用户有权读取
[root@web01 extra]# curl -I -s 10.0.0.8|head -1
HTTP/1.1 200 OK #<==200 OK了
4、Nginx配置文件中设置allow、deny等权限控制,导致客户端没有没权限访问
[root@web01 extra]# cat www.conf
#www virtualhost by ceshi
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@web01 extra]# curl -I -s 10.0.0.8|head -1
HTTP/1.1 200 OK #<==设置755让nginx用户有权读取
[root@web01 extra]# ../../sbin/nginx -sreload
[root@web01 extra]# curl -I -s 10.0.0.8|head -1
HTTP/1.1 403 Forbidden