新图标上线三天,同事那边还是旧图标,强刷能变,第二天又回到旧的,curl 看 favicon.ico 的 Cache-Control 是 max-age=604800。碰到这种情况,我一般先确认改动有没有真的生效。
原因不复杂,图标走的是静态资源默认缓存策略,浏览器在有效期内不会回源,强刷只是临时绕过。文件名没变,缓存键就一直是同一个。
碰到「favicon 缓存」这类问题,我习惯先把当前配置原样备份一份,改坏了立刻换回来,不用现场推。报错里带路径的,先去看那个路径在不在、权限对不对。
location ~* \.(ico|png)$ {
add_header Cache-Control "public, max-age=3600";
}
同一份配置存在多处的,先确认改的是被加载的那一份。新版本先放一台机器上跑一天再全量,问题一般在这段时间暴露。
备份不是备了就行,恢复一次才算数,很多备份文件打开才发现是空的。
具体做法是,给图标换个带版本的文件名 比如 favicon-v3.ico;或者把图标的 Cache-Control 调成 max-age=3600;HTML 里那条 link 后面加 ?v=3 强制换键;线上用 curl -I 确认响应头已经变了。
最后用这个标准收尾,换文件名后刷新一次就显示新图标 一小时内不再回退到旧图。
