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
401 Unauthorized
403 Forbidden
- 非常常见,重点理解:
- 可能原因:
- 文件权限不足
deny 规则
- 目录无 index 文件
- SELinux 限制
- 排查:
ls -l
getenforce
404 Not Found
- 含义:资源不存在
- 常见原因:
- root / alias 配置错误
- location 匹配不对
- 文件路径写错
405 Method Not Allowed
413 Request Entity Too Large
429 Too Many Requests
四、5xx:服务端错误
重点!通常表示 Nginx 或后端出问题
500 Internal Server Error
502 Bad Gateway
503 Service Temporarily Unavailable
504 Gateway Timeout
- 含义:后端响应超时
- 解决:
proxy_read_timeout 60s;
五、Nginx 特有 / 容易混淆的点
1. access.log 里的状态码
GET /a 404 153 "-" "-"
2. error.log 比状态码更重要
例如:
connect() failed (111: Connection refused)
比 502 更有价值
3. Nginx 自身“内部码”
- 不是 HTTP 码
- 如:
499(客户端主动断开)
499 常见于:
六、快速排查建议(实战流程)
- 看状态码类别(4xx / 5xx)
- 看 access.log + error.log
- 判断是:
- 用 curl 本地验证
curl -I http://localhost
如果你愿意,可以把:
- 具体状态码
- Nginx 配置片段
- error.log 报错
发出来,我可以帮你“按实际情况精确定位”。