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. 步骤 1确认真实状态码

    用 curl -I 域名 或 /tools/http-status 直接查看服务器返回的状态码,不要只看浏览器界面上的报错文案。

  2. 步骤 2按状态码分类定位方向

    4xx优先检查请求路径、权限、参数;5xx优先检查后端服务是否存活、配置是否正确。

  3. 步骤 3查看服务器日志

    结合Nginx的access.log/error.log或应用日志,定位具体是哪个请求、哪一层出的问题。

  4. 步骤 4修复配置或代码

    根据日志定位的原因调整Nginx配置(如proxy_pass地址)、应用代码或权限设置。

  5. 步骤 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 在线查询。

相关教程

官方资料来源