Nginx 站点排障怎么查:404、403、502、HTTPS 和反代顺序

3次阅读
没有评论

Nginx 出问题时,页面上通常只给你一个状态码:404、403、502、重定向循环、证书异常。真正排障不能只看浏览器提示,要把 DNS、证书、Nginx 配置、上游服务、日志和文件权限串起来看。

我的习惯是先跑一遍固定检查清单,再按状态码深入。

先跑部署检查清单

不管是什么错误,先确认基础项:

nginx -t
nginx -s reload

然后看:

  1. server_name 是否匹配当前域名。
  2. 80/443 端口是否监听。
  3. 云服务器安全组是否放行。
  4. SSL 证书和私钥路径是否正确。
  5. 反代的后端端口是否真的可访问。
  6. access.logerror.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。

rootalias 也要分清。root 会把 location 后面的路径拼到根目录后面;alias 则直接映射到指定目录。很多图片服务 404 都是这两个混用了。

403 优先看权限和索引

403 表示 Nginx 找到了位置,但不允许访问。常见原因:

  • 目录没有索引页。
  • 没开 autoindex
  • 文件或目录权限不足。
  • worker 用户没有读取权限。
  • WAF、防盗链、跨域规则拦截。

比如访问 /download/,目录下没有 index.html,又没开启目录浏览,Nginx 就可能返回 403。

权限问题要看 Nginx worker 使用的用户,比如 www-datanginxwww。文件属于 root 但不给其他用户读,也会出问题。

502 优先看上游服务

502 通常表示 Nginx 作为代理时,上游服务不可用或返回异常。

常见原因:

  1. 后端服务没启动。
  2. 反代端口写错。
  3. Docker 容器网络不通。
  4. 上游启动慢,超时太短。
  5. 后端进程崩溃。
  6. 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 和源站。

排查顺序:

  1. DNS 是否指向 Cloudflare。
  2. Cloudflare 是否开启代理。
  3. Cloudflare SSL 模式是什么。
  4. 源站 Nginx 是否监听 443。
  5. 源站证书是否有效。
  6. 是否存在多处强制 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 排障可以按这条线走:

  1. DNS 到没到这台机器。
  2. 端口有没有监听。
  3. server_name 是否匹配。
  4. nginx -t 是否通过。
  5. 静态文件路径和权限是否正确。
  6. 上游服务是否能本机访问。
  7. HTTPS 和 Cloudflare 模式是否一致。
  8. 日志里有没有更具体错误。

有顺序以后,Nginx 问题就不会变成“到处试配置”。先定位是哪一层,再改哪一层。

正文完
 0
bdspAdmin
版权声明:本站原创文章,由 bdspAdmin 于2026-06-30发表,共计2054字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
评论(没有评论)