HTTP 状态码排查
更新于 2026年7月23日
适用人群:网站出现打不开、跳转异常或报错页面,需要按状态码定位原因的开发者/运维
核心概念
常见HTTP状态码参考表
| 状态码 | 含义 | 常见原因 |
|---|---|---|
| 200 | 请求成功 | 正常响应 |
| 301 | 永久重定向 | 域名跳转、HTTP到HTTPS跳转、URL规范化 |
| 302 | 临时重定向 | 登录跳转、临时维护跳转 |
| 304 | 未修改,使用缓存 | 浏览器缓存协商命中 |
| 400 | 请求语法错误 | 请求参数格式错误、请求头异常 |
| 401 | 未认证 | 缺少或无效的登录凭证 |
| 403 | 禁止访问 | 权限不足、目录禁止列出、IP被拦截 |
| 404 | 资源不存在 | 路径错误、页面被删除、rewrite规则失效 |
| 405 | 方法不被允许 | 用了服务器未开放的HTTP方法 |
| 500 | 服务器内部错误 | 应用代码报错、配置错误 |
| 502 | 网关错误 | Nginx反向代理的后端服务未启动或无响应 |
| 503 | 服务不可用 | 服务器过载、维护模式、限流 |
| 504 | 网关超时 | 后端处理时间过长,超过代理等待时间 |
操作步骤
步骤 1确认真实状态码
用 curl -I 域名 或 /tools/http-status 直接查看服务器返回的状态码,不要只看浏览器界面上的报错文案。
步骤 2按状态码分类定位方向
4xx优先检查请求路径、权限、参数;5xx优先检查后端服务是否存活、配置是否正确。
步骤 3查看服务器日志
结合Nginx的access.log/error.log或应用日志,定位具体是哪个请求、哪一层出的问题。
步骤 4修复配置或代码
根据日志定位的原因调整Nginx配置(如proxy_pass地址)、应用代码或权限设置。
步骤 5重新验证
修复后重新用curl或浏览器请求确认状态码恢复正常,再用 /site-check 做整体复查。
实际示例
# 查看响应状态码和响应头
curl -I https://example.com
# 只打印状态码
curl -s -o /dev/null -w "%{http_code}\n" https://example.com
# 实时查看Nginx错误日志,定位502/504
tail -f /var/log/nginx/error.log
典型502的Nginx反向代理配置检查点:
location / {
proxy_pass http://127.0.0.1:3000; # 确认端口和后端服务实际监听端口一致
proxy_set_header Host $host;
}
常见错误
- ⚠️只看浏览器显示的"无法访问此网站",不去确认服务器实际返回的状态码
- ⚠️把301和302搞混,本该是临时的跳转配置成永久跳转,被浏览器/CDN长期缓存难以撤销
- ⚠️遇到502直接重启服务器了事,没查日志,问题过一会又复现
- ⚠️把404当成个别页面问题,没意识到是整体rewrite规则或路由配置失效
对应工具
常见问题
301和302有什么区别?
301是永久重定向,搜索引擎会更新索引并转移权重,浏览器可能长期缓存跳转;302是临时重定向,通常不会被当作永久搬迁处理,适合临时性跳转场景。
502和504有什么区别?
502是网关(如Nginx)收到了后端的无效响应或后端根本没有响应/未启动;504是网关等待后端处理的时间超过了设定的超时时间,两者都指向后端服务问题,但504更偏向"处理太慢"。
404一定是页面真的不存在吗?
不一定,也可能是URL重写(rewrite)规则配置错误、大小写不匹配、路由未正确注册等原因导致本应存在的页面被判定为不存在。
在哪里能直接查看网站返回的状态码?
可以用命令行的curl -I,浏览器开发者工具的Network面板,或直接使用 /tools/http-status 在线查询。
相关教程
官方资料来源