之前 AWS EC2 上安装 nginx 时 ,访问一直正常 , 直到在物理机和 GCP 上使用时就会出现 403 Forbidden 的情况 , 查看 nginx 日志 , 默认路径为 /var/log/nginx/error.log , 发现报错内容为 Permission denied .

于是谷歌解决办法 . CSDN 此篇文章分析的比较完整 , 现简单总结如下 .

1. 由于启动用户和 nginx 工作用户不一致所致

查看命令 ps aux | grep "nginx: worker process" | awk'{print $1}'

如若不一致 , 则要将 nginx.conf 中的 user 改为和启动用户一致

1
2
3
4
5
6
7
8
9
10
user  nginx;
worker_processes 4;

error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;


events {
worker_connections 65535;
}

2. 缺少 index.html 或者 index.php 文件

1
2
3
4
5
6
7
8
9
10
11
server {  

 listen       80;  

server_name  localhost;  

index  index.php index.html;  

root  /data/www/;

 }

如果在 /data/www/ 下没有 index.phpindex.html 时 就会报 403 forbidden

3. 权限问题 , 若 nginx 没有 web 目录的操作权限 , 也会出现403错误

解决办法: 修改 web 目录的读写权限 , 或者是把nginx的启动用户改成目录的所属用户 , 重启 nginx 解决

1
2
chmod -R 777 /data
chmod -R 777 /data/www/

4. SELinux 设置为开启的原因

查看当前 selinux 状态

cat /etc/selinux/conf

将状态改为disabled

1
SELINUX=disabled

重启 reboot 生效