nginx 403错误踩坑经验

Posted by Forgus on 2020-10-20

问题描述

本地执行 curl forgus.vicp.io 返回 403 Forbidden,但域名解析正常指向内网 IP 192.168.2.50

排查过程

1. 初步诊断

1
2
3
curl -v forgus.vicp.io
# 返回 HTTP/1.1 403 Forbidden
# Server: nginx/1.22.1

2. 远程检查 nginx 配置

1
ssh root@192.168.2.50 "cat /etc/nginx/conf.d/*.conf"

配置内容:

1
2
3
4
5
6
7
8
server {
listen 80;
server_name forgus.vicp.io;
location / {
root /root/blog/public;
index index.html index.htm;
}
}

3. 检查目录权限

1
2
ssh root@192.168.2.50 "ls -la /root/"
# drwx------ 9 root root 4096 Apr 7 15:01 .

4. 定位根因

项目
nginx 运行用户 www-data
网站根目录 /root/blog/public
/root 目录权限 700 (仅 root 可访问)

结论:nginx 以 www-data 用户运行时无权访问 /root 目录,导致返回 403。

解决方案

修改 nginx 配置,将运行用户改为 root:

1
2
sed -i 's/user www-data/user root/' /etc/nginx/nginx.conf
nginx -s reload

验证结果

1
2
curl -I forgus.vicp.io
# HTTP/1.1 200 OK

注意事项

  • 长期方案建议:将网站目录移动到 /var/www/ 或其他 nginx 可访问的路径
  • 安全考虑:谨慎使用 root 用户运行 nginx