换对象存储桶之后图片全返回 404,直接访问新桶地址正常,CDN 响应里还能看到指向旧桶的 Location 头。日志里能对上时间点,这种反而好排。

源站对图片返回 302 跳到旧桶,边缘把这条跳转连同 Location 一起缓存了,TTL 没到就一直在跳旧地址。换桶时也没有刷新这批路径。这一点先确认清楚,后面就不用反复试。

curl -sI https://cdn.example.com/a.jpg | grep -iE 'HTTP/|location'
# 确认没有指向旧桶的 location

「图片跳转被缓存」排查到最后往往是很小的一处差异,前面那些复杂猜测可以先放一放。先做最小复现,能稳定跑出来的问题,排查成本会低一个数量级。

别只看报错的最后一行,往上看几行,真正的起因通常在上面。同类问题如果隔一段时间又出现,多半是某个定时任务或重启流程把改动冲掉了。

处理上按这个顺序:把图片跳转响应设成不缓存,或 TTL 压到 60 秒;换桶时同步刷新这批图片地址,别等自然过期;长期做法是让边缘直接回源到新桶,减少一次跳转。

结果对不对很好判断,图片地址直接返回 200 和图片内容,响应里没有旧桶地址。

作者 9823189