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 的请求才看得到边缘节点的真实返回。线上能稳定复现的问题都不算难,难的是只在大流量下才出现的那种。
