源站开了 ETag,但 CDN 回源时不透传条件请求头,每次都拿全量 200。回源流量比上月翻了三倍,蜘蛛的重复抓取尤其明显,源站 CPU 一直高企。
真正麻烦的地方在于,几个原因的现象几乎一样。CDN 回源配置里删掉了条件请求头;源站 ETag 每次请求都变,304 永远命中不了;边缘把 ETag 剥掉,客户端拿不到缓存校验值;缓存时间设得太短,回源频率过高。
先看响应头里的 ETag
curl -sI https://www.example.com/ | grep -i etag
模拟一次条件请求
curl -sI -H 'If-None-Match: "abc123"' https://www.example.com/ | head -3
再往下让
末了观
察
这类改动我都写进变更记录,过两周再出问题时能对上号。
我习惯把每一步的执行时间和结果记在一边,后面复盘省事。
改之前我把相关日志按时间截了一段存着,事后对时间线用得上。
别只看报错消失,验证要多做一步。透传后 304 占比回到六成,回源流量降了一半,源站 CPU 从 70% 落到 35%,蜘蛛抓取速度也变快。
304 省的是带宽和计算,前提是 ETag 稳定,每次变的 ETag 比没有更浪费。改动前把原配置备份一份,出问题能马上回滚,这比任何技巧都实用。
