温馨提示×

怎样解读nginx状态码

小樊
43
2026-10-23 04:11:11
栏目: 编程语言

Nginx 的状态码(准确说是 HTTP 响应状态码)本质上遵循 HTTP 标准,但结合 Nginx 自身行为,有一些“常见场景”和“特殊含义”。下面按类别 + 常见状态码 + 实际含义 + 排查思路来系统解读。


一、2xx:成功类

表示请求被正常处理。

200 OK

  • 含义:请求成功
  • 常见场景:正常访问页面、接口
  • 排查:无需处理

204 No Content

  • 含义:成功,但无返回体
  • 常见场景:PUT / DELETE 接口

206 Partial Content

  • 含义:断点续传 / 分片下载
  • 常见场景:视频、大文件下载

二、3xx:重定向类

表示客户端需要进一步操作。

301 Moved Permanently

  • 含义:永久重定向
  • 常见原因:
    • return 301
    • rewrite ... permanent
  • 注意:浏览器会缓存

302 Found

  • 含义:临时重定向
  • 常见原因:
    • return 302
    • 未指定 permanent 的 rewrite

304 Not Modified

  • 含义:资源未变化,用缓存
  • 常见场景:静态资源 + 缓存头
  • 说明:不是错误

三、4xx:客户端错误

最常用于定位“谁的问题”。

400 Bad Request

  • 可能原因:
    • 请求头过大
    • URL 非法
    • 请求格式错误

401 Unauthorized

  • 含义:未认证
  • 常见场景:
    • auth_basic
    • 接口未带 token

403 Forbidden

  • 非常常见,重点理解:
  • 可能原因:
    • 文件权限不足
    • deny 规则
    • 目录无 index 文件
    • SELinux 限制
  • 排查:
    ls -l
    getenforce
    

404 Not Found

  • 含义:资源不存在
  • 常见原因:
    • root / alias 配置错误
    • location 匹配不对
    • 文件路径写错

405 Method Not Allowed

  • 含义:方法不支持
  • 常见场景:
    • 静态文件用 POST
    • 接口未配置

413 Request Entity Too Large

  • 含义:上传文件太大
  • 解决:
    client_max_body_size 20m;
    

429 Too Many Requests

  • 含义:限流
  • 常见原因:
    • limit_req
    • limit_conn

四、5xx:服务端错误

重点!通常表示 Nginx 或后端出问题

500 Internal Server Error

  • 最常见
  • 可能原因:
    • 后端代码异常
    • rewrite 死循环
    • 配置错误

502 Bad Gateway

  • 高频问题
  • 含义:Nginx 连后端失败
  • 常见原因:
    • 后端挂了
    • upstream 配置错
    • PHP-FPM 未启动
  • 排查:
    netstat -lntp
    tail -f error.log
    

503 Service Temporarily Unavailable

  • 常见原因:
    • 限流触发
    • 维护模式
    • upstream 全不可用

504 Gateway Timeout

  • 含义:后端响应超时
  • 解决:
    proxy_read_timeout 60s;
    

五、Nginx 特有 / 容易混淆的点

1. access.log 里的状态码

GET /a 404 153 "-" "-"
  • 第一个数字就是 HTTP 状态码

2. error.log 比状态码更重要

例如:

connect() failed (111: Connection refused)

比 502 更有价值

3. Nginx 自身“内部码”

  • 不是 HTTP 码
  • 如:499(客户端主动断开)
  • 499 常见于:
    • 前端超时
    • 用户刷新

六、快速排查建议(实战流程)

  1. 看状态码类别(4xx / 5xx)
  2. 看 access.log + error.log
  3. 判断是:
    • Nginx 配置问题
    • 文件权限问题
    • 后端服务问题
  4. 用 curl 本地验证
curl -I http://localhost

如果你愿意,可以把:

  • 具体状态码
  • Nginx 配置片段
  • error.log 报错

发出来,我可以帮你“按实际情况精确定位”。

0 踩