Nginx 出问题时,页面上通常只给你一个状态码:404、403、502、重定向循环、证书异常。真正排障不能只看浏览器提示,要把 DNS、证书、Nginx 配置、上游服务、日志和文件权限串起来看。
我的习惯是先跑一遍固定检查清单,再按状态码深入。
先跑部署检查清单
不管是什么错误,先确认基础项:
nginx -t
nginx -s reload
然后看:
server_name是否匹配当前域名。- 80/443 端口是否监听。
- 云服务器安全组是否放行。
- SSL 证书和私钥路径是否正确。
- 反代的后端端口是否真的可访问。
access.log和error.log有没有更具体错误。
不要跳过日志。Nginx 给浏览器的是结果,日志里才有原因。
404 优先看匹配和路径
404 表示 Nginx 没找到资源,常见原因有:
server_name没匹配到正确 server block。root路径写错。alias路径拼接错。- 前端单页应用缺少 fallback。
- 宝塔或面板生成的配置没生效。
静态站点常见配置:
location / {
try_files $uri $uri/ /index.html;
}
如果是 Vue、React、Vite 这类单页应用,刷新二级路由时 Nginx 会去磁盘找真实文件。没有 try_files ... /index.html,就容易 404。
root 和 alias 也要分清。root 会把 location 后面的路径拼到根目录后面;alias 则直接映射到指定目录。很多图片服务 404 都是这两个混用了。
403 优先看权限和索引
403 表示 Nginx 找到了位置,但不允许访问。常见原因:
- 目录没有索引页。
- 没开
autoindex。 - 文件或目录权限不足。
- worker 用户没有读取权限。
- WAF、防盗链、跨域规则拦截。
比如访问 /download/,目录下没有 index.html,又没开启目录浏览,Nginx 就可能返回 403。
权限问题要看 Nginx worker 使用的用户,比如 www-data、nginx、www。文件属于 root 但不给其他用户读,也会出问题。
502 优先看上游服务
502 通常表示 Nginx 作为代理时,上游服务不可用或返回异常。
常见原因:
- 后端服务没启动。
- 反代端口写错。
- Docker 容器网络不通。
- 上游启动慢,超时太短。
- 后端进程崩溃。
- Nginx 到 upstream 的协议不一致。
先在服务器本机验证上游:
curl http://127.0.0.1:8080/health
如果本机 curl 都不通,不要先改 Nginx。先把后端服务启动和端口确认好。
反代配置可以从最小可用开始:
location /api/ {
proxy_pass http://127.0.0.1:8080/;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
HTTPS 和 Cloudflare 要一起看
如果站点接了 Cloudflare,HTTPS 问题要同时看 Cloudflare 和源站。
排查顺序:
- DNS 是否指向 Cloudflare。
- Cloudflare 是否开启代理。
- Cloudflare SSL 模式是什么。
- 源站 Nginx 是否监听 443。
- 源站证书是否有效。
- 是否存在多处强制 HTTPS 导致循环跳转。
Cloudflare 的 SSL 模式如果和源站证书状态不匹配,就容易出现访问异常。比如源站没有有效证书,却用了严格模式,就会失败。
重定向循环也常见:Cloudflare 强制 HTTPS、Nginx 强制 HTTPS、应用自己也强制跳转,几层叠加后就绕圈。
WordPress 迁移后的 Nginx 问题
WordPress 迁移后,Nginx 问题常常不只是 Nginx 本身,还可能来自 PHP、主题、伪静态和权限。
优先检查:
- 伪静态规则是否正确。
- PHP-FPM 是否运行。
- 主题和插件依赖扩展是否安装。
- 上传目录权限是否正确。
- 数据库字符集是否有异常。
如果后台打不开、文章 404、媒体图片丢失,不要只盯 Nginx。WordPress 的固定链接、主题函数、PHP 扩展和上传目录都要看。
MinIO 反代的几个点
MinIO 通过 Nginx 反代时,重点看:
Host头。- 上传内容类型。
- 桶策略。
proxy_pass路径是否多了或少了斜杠。- 客户端直连是否正常。
先用 mc 客户端直连验证桶和密钥,再看 Nginx 反代。这样可以区分是 MinIO 自身权限问题,还是代理层问题。
最后给自己一个顺序
Nginx 排障可以按这条线走:
- DNS 到没到这台机器。
- 端口有没有监听。
server_name是否匹配。nginx -t是否通过。- 静态文件路径和权限是否正确。
- 上游服务是否能本机访问。
- HTTPS 和 Cloudflare 模式是否一致。
- 日志里有没有更具体错误。
有顺序以后,Nginx 问题就不会变成“到处试配置”。先定位是哪一层,再改哪一层。




