对于使用nginx提供服务的站点来说,访问站点返回403错误有多种原因,比较常见的如下:
- nginx配置中直接返回了403http状态码
- nginx中配置的站点目录或文件没有访问权限
1 站点返回403状态码
例如下面的配置,访问站点http://demo.lxh.space
会直接返回403错误,如图
server {
server_name demo.lxh.space;
root /usr/local/wwwroot/demo;
location / {
return 403;
}
error_page 404 /404.html;
location = /40x.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}
2 站点目录或文件权限错误
今天也是偶遇这个问题。测试站点是使用Vue框架做的项目,使用npm build之后,将dist文件夹使用scp命令复制到了服务器站点目录中。但是访问过程中一直报403错误。仔细检查站点的dns解析和nginx配置感觉都没问题,最后发现站点目录内的文件都是600权限,如下图:
经测试,如果nginx指向的站点根目录不存在也会出现403错误
但是nginx的worker进程并不是root用户,所以导致访问站点文件的时候会没有权限,nginx进程信息如下:
3 解决方案
将站点目录及子目录设置为755
权限,将站点目录下所有文件设置为644
权限,即所有用户对文件夹有读
和执行
权限,所有用户对文件有读
权限。这里会用到find
、xargs
和chmod
三个 命令。执行过程如下(再站点根目录下执行):
#修改文件类型权限
find ./ -type f|xargs chmod 644
#修改文件夹类型权限
find ./ -type d|xargs chmod 755
指令执行前后文件的权限如下图:
文件及文件夹权限修改完成后,再访问站点,响应正常,如下: