robots.txt 由源站生成,CDN 按默认规则缓存了 40 分钟。运维改完规则立刻用浏览器验证通过,蜘蛛却在半小时内仍读到旧版本,一批目录被误挡。

一开始怀疑是「源站没有返回 Cache-Control,边缘按默认值处理」,查了一圈,方向不对。

排查方向其实有限,先把可能性排一排。CDN 对 txt 文件套用了静态资源的长 TTL。少数情况下是验证时用了带缓存的浏览器,看到的是本地副本。

少数情况下是巡检只查了其中一台边缘节点 其余节点仍是旧内容。

动手时先看边缘返回的缓存状态

curl -sI https://www.example.com/robots.txt | grep -iE 'age|x-cache|cache-control'

给 robots 单独设不缓存

location = /robots.txt { add_header Cache-Control 'no-store'; }

再往下改完主动刷新边缘

curl -X PURGE https://www.example.com/robots.txt

等前面都确认过,再用无缓存方式复核

curl -s -H 'Cache-Control: no-cache' https://www.example.com/robots.txt | head -20

改完先别撤,确认这几项。改成不缓存并主动刷新后,改动在十秒内就同步到所有节点,误挡的目录第二天恢复抓取。

提醒一点。验证任何配置改动都要绕开浏览器缓存,带 no-cache 的请求才看得到边缘节点的真实返回。线上能稳定复现的问题都不算难,难的是只在大流量下才出现的那种。

作者 9823189