问题出现得很突然,日志倒是留得挺全。源站维护时返回 503,CDN 按默认规则把错误页缓存了 10 分钟,维护结束后用户和蜘蛛拿到的仍是 503,日志里源站全是 200。
刚开始盯着「源站返回 503 时带了较长的 Retry-After」,折腾了半个多小时,排掉了。
真正麻烦的地方在于,几个原因的现象几乎一样。CDN 对 5xx 也做了短缓存,用于削峰。少数情况下是维护结束后没有主动清理边缘缓存。
不容易想到的是,缓存键忽略了 Cookie,所有访客命中同一份错误页。
上来先确认边缘返回的状态码
curl -sI https://www.example.com/ | findstr /i "HTTP x-cache age"
直连源站对比
curl -sI -H "Host: www.example.com" http://203.0.113.10/ | findstr /i HTTP
然后清掉错误页缓存
curl -X PURGE https://www.example.com/
剩下的就是把 5xx 排除出缓存
proxy_cache_valid 200 10m;
怎么算真的好了,看的是同一批现象。清理并调整缓存策略后,边缘恢复 200,蜘蛛的抓取量在两小时内回到正常水平。
补一句。5xx 不该被缓存,哪怕只有几分钟,也足够让蜘蛛把整批页面记成故障。这类问题最好一次改到位,反复小改反而容易把原因搅混。
