上 Cloudflare 后源站 Nginx 日志里 $remote_addr 全是 172.70 开头的节点地址,百度蜘蛛和普通访客分不清,抓取统计每天多出三万条,改 UA 过滤也没用。

原因不止一个,得分开看。没配 real_ip_header CF-Connecting-IP,源站只看到回源节点;set_real_ip_from 只写了部分网段,剩余节点仍按节点 IP 记录;防火墙又改写了一次 X-Forwarded-For,取到的地址不可信;日志里没有落真实客户端字段,事后无法回补历史数据。

动手时先看日志首列地址属于哪一段

awk '{print $1}' access.log | sort | uniq -c | sort -rn | head

再往下按官方网段配置 real_ip

set_real_ip_from 172.64.0.0/13;
real_ip_header CF-Connecting-IP;
real_ip_recursive on;

随后验证蜘蛛请求拿到的是真实地址

curl -s https://www.example.com/ -H "CF-Connecting-IP: 66.249.66.1" -o /dev/null -w "%{http_code}"

末了把真实 IP 写进自定义日志字段

log_format main '$remote_addr $http_cf_connecting_ip $request_uri $status';

当时还开着另一个排查窗口,两边日志对照着看才定位到。

别只看报错消失,验证要多做一步。日志里能看到 66.249 开头的蜘蛛地址,单日抓取统计回落到一万条左右,与 GSC 的抓取数对得上。

real_ip 配完要 reload,CDN 网段还会变,三个月核一次官方列表再更新。同一份配置在测试环境跑通,不代表线上没事,两边的默认值经常不一样。

作者 9823189