这类问题我又碰上了一次。站点前面套了两层代理 Nginx 的 remote_addr 全是 10.0.0.x 内网地址 日志里根本看不出蜘蛛来过 抓取统计说百度一天来 8 万次 服务器日志里一条百度 IP 都没有
第一反应是「多层代理时 XFF 有多个值 取错了位置」,验证下来不成立。
排查方向其实有限,先把可能性排一排。没有解析 X-Forwarded-For 只记了直连地址;代理层没有把真实 IP 透传下去;CDN 用的是自定义头 比如 True-Client-IP。
先看请求头里有没有真实 IP
curl -sI https://www.example.com | grep -i -E 'x-forwarded|true-client'
日志格式改成输出 XFF
log_format real '$http_x_forwarded_for $request';
接着配置 real_ip 模块取真实地址
set_real_ip_from 10.0.0.0/8; real_ip_header X-Forwarded-For;
末了按真实 IP 统计蜘蛛请求
awk '{print $1}' access.log | sort | uniq -c | sort -rn | head
我习惯把每一步的执行时间和结果记在一边,后面复盘省事。
改完先别撤,确认这几项。日志里能看到公网蜘蛛 IP 统计条数与抓取后台量级一致 排查时能按 IP 追踪单只蜘蛛。
容易忽略的是,XFF 可以伪造 只做统计用 真要做访问控制还得配合 CDN 的签名头。拖得越久,排查成本越高,因为现场状态会被后续操作覆盖。
