反向代理日志关联是什么
反向代理(Nginx、HAProxy 等)位于客户端与业务服务之间,它记录真实客户端 IP、请求路径、上游返回状态与各段耗时;上游应用日志记录业务处理细节。同一个请求要两侧一起看:入口行为看代理日志,业务行为看上游日志,用请求 ID 对齐,没有 ID 时用时间加路径近似关联。
基本信息
| 适用组件 | Nginx、HAProxy、云负载均衡、API 网关 |
|---|---|
| 代理侧关注 | 真实客户端 IP、URI、上游状态码、各段耗时 |
| 上游侧关注 | 业务处理细节、异常堆栈、数据库与下游调用 |
| 关联键 | 请求 ID 头优先(如 X-Request-Id),其次时间 + 路径 |
典型使用场景
- 仅凭上游日志无法得知真实客户端来源
- 排查 502/504:判断是上游超时还是代理层问题
- 攻击溯源:确认一批恶意请求来自同一客户端还是被分散
- 验证限流与封禁是否命中正确的客户端
- 分析慢请求:区分代理等待还是后端处理慢
两侧检索
两侧检索
grep '10.0.3.77' /var/log/nginx/access.log | tail -20 # 代理侧:某客户端记录
grep 'abc123' /var/log/nginx/access.log # 入口侧:按请求 ID
grep 'abc123' /var/log/app/app.log # 上游侧:同一请求 ID
awk '$9==502 || $9==504 {print $1,$4,$7,$9}' access.log # 定位上游错误号
# 无请求 ID 时用 时间±2 秒 + URI 近似关联,并在报告中注明为近似代理侧常见字段
| 字段 | 含义 | 异常表现 |
|---|---|---|
| $remote_addr | 直连代理的客户端 IP | 全是代理地址说明前置还有一层 |
| X-Forwarded-For | 链路 IP 串 | 可伪造,只信任最近可信代理追加的值 |
| $upstream_status | 上游返回状态码 | 与 $status 不一致说明代理改写过响应 |
| $upstream_response_time | 上游处理耗时 | 明显偏大指向业务或数据库 |
| $request_time | 代理侧总耗时 | 总耗时大而上游耗时小说明网络或客户端慢 |
X-Forwarded-For 是逐跳追加的,最左侧由客户端填充、可被伪造。判断真实来源应取最近一个可信代理追加的那个值。
多级链路(CDN → WAF → 反向代理 → 应用)每一级都可能改写或截断头部,排查前先画清链路,再决定信哪一段。
代理与上游主机的时钟要对齐后再做近似关联,否则时间偏移会让匹配整体错位。