问题出现得很突然,日志倒是留得挺全。源站维护时返回 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 不该被缓存,哪怕只有几分钟,也足够让蜘蛛把整批页面记成故障。这类问题最好一次改到位,反复小改反而容易把原因搅混。

作者 9823189