今天遇到了一个特别奇怪的问题,通过Nginx访问某个资源的时候,突然报403 Permission denied,但是整个服务都是正常的,排查了半天,没找到原因,查阅了一些资料,大致会出现以下四种可能性情况:
-
文件没有访问权限
解决办法很简单,修改文件或文件夹的读写权限即可,或者使用目录的所属用户重新启动Nginx
1
chmod -R 777 /data/www/html
-
缺少index指定的文件
1
2
3
4
5
6server{
listen 80;
server_name localhost;
index index.php index.html;
root /data/www/html
}如果在目录
/data/www/html
中没有index.php
和index.html
文件,则会报403错误 -
SELinux为开启状态
SELinux是一组内核修改和用户空间工具,其提供了访问控制安全策略机制,包括了强制访问控制。
-
查看SELinux状态
1
/usr/sbin/sestatus
-
将SELINUX=enforcing 修改为 SELINUX=disabled 状态
1
vim /etc/selinux/config
-
重启机器后生效
1
reboot now
-
-
Nginx启动用户和工作用户不一致
我遇到的就是这个情况,通过命令
ps -ef | grep nginx
查看nginx进程信息或者通过
ps aux | grep "nginx: worker process" | awk '{print $1}'
查看在
/etc/nginx/nginx.conf
文件中将修改为何启动用户一样,然后重新启动nginx即可将
user nginx
修改为user root
,然后重启nginx进程。