HTTP 故障定位手册

验证:未记录
适用版本
未记录
验证范围
尚未登记验证记录。

HTTP(Hypertext Transfer Protocol,超文本传输协议)排障先找失败在哪一跳、由谁返回,再修改配置。保留故障发生时间、入口、路径模板、状态码、请求 ID 和影响比例。

1. 第一轮证据#

准备真实预发布入口的无副作用路径;curl 不带业务凭证,不自动跟随跳转。

export PROBE_URL='https://api.staging.example.com/health/ready'
umask 077
HTTP_WORK=$(mktemp -d)
curl -sS --connect-timeout 3 --max-time 15 -D "$HTTP_WORK/headers" -o /dev/null -w 'code=%{http_code} ip=%{remote_ip} version=%{http_version} dns=%{time_namelookup} connect=%{time_connect} tls=%{time_appconnect} first=%{time_starttransfer} total=%{time_total}\n' "$PROBE_URL" > "$HTTP_WORK/timing"
CURL_RC=$?
printf 'curl_exit=%s\n' "$CURL_RC"
cat "$HTTP_WORK/timing" "$HTTP_WORK/headers"

在交互 Bash 执行,预期故障检查不启用 set -e。curl 退出码与 HTTP 状态不同:不用 --fail 时 HTTP 500 仍可能退出 0;000 不是服务端 HTTP 状态。

证据 下一步
curl 6 DNS(Domain Name System,域名系统)解析失败;检查解析环境
curl 7 连接失败;端口、路由、防火墙、监听与地址族
curl 28 超时;结合阶段计时,不只增加 timeout
curl 35/60 TLS(Transport Layer Security,传输层安全)协商/证书验证问题
HTTP 502/504 代理错误日志、上游地址、连接/读取阶段
HTTP 503 容量、限流、健康目标和应用主动拒绝
浏览器失败但 curl 成功 跨域、混合内容、浏览器证书库、缓存、扩展/Service Worker

具体退出码见 curl 官方说明。

2. Hands-on:区分入口故障与上游故障#

先启动 隔离实验环境:

for path in health unavailable broken; do
  curl -sS --max-time 5 -o /dev/null -w "$path status=%{http_code} total=%{time_total}\n" "http://127.0.0.1:18080/$path"
done
docker logs "$HTTP_LAB_NAME" --tail 20

预期 200/503/502。比较日志里的 status、upstream_status、upstream_time:主动返回 503 不等于真实上游超时;502 由连接拒绝触发。真实 504 要结合 upstream timed out 等证据,不能仅用返回固定 504 的端点冒充超时实验。

3. 生产代理日志至少包含什么#

Nginx 诊断配置在专题首页,记录 URI 路径、不记 query、Cookie、Authorization 和正文。生产还需路径模板/采样以限制敏感数据和高基数。

字段 用途
request_id、time 关联用户报告与服务端事件
status、upstream_status 区分最终响应与上游尝试;多次尝试可能为列表
request_time 入口观测总耗时,可能受客户端上传/下载影响
upstream_connect_time、upstream_header_time、upstream_response_time 上游连接、响应头、完整响应耗时

ALB(Application Load Balancer,应用负载均衡器)应同时看 elb_status_code 与 target_status_code、目标健康和访问日志,详见 ALB Monitoring。没有应用日志不能直接证明请求没到达:先排除采样、时间偏差和日志丢失。

4. 按症状收敛#

  • 偶发 502:关联发布、后端关闭连接、连接池复用、响应头格式;不要只看 CPU。
  • 约固定秒数失败:列出所有层的连接/读取/总截止时间,找匹配阈值。
  • 首字节快但下载慢:检查响应大小、压缩、缓冲、带宽和客户端接收能力。
  • 只部分用户失败:比较地域、IPv4/IPv6、代理、Cookie 大小、CDN 节点和协议版本。
  • 登录循环:检查外部协议识别、Cookie 域/路径/SameSite、Location;不要把跨域重定向当普通 JSON 响应。

每次只改一层配置,保存原值。恢复后同时验证故障路径、正常业务、错误率和延迟;结束删除临时证据中的凭证,按留存策略保存脱敏信息。相关:生命周期、超时与重试、浏览器跨域。

搜索文档

输入关键词,搜索所有文档。

↑ ↓ 选择 · Enter 打开 · Esc 关闭