事情本身不复杂,线索都在日志里。抽查发现同一篇文章在两个节点返回不同正文,一个还是改版前的版本,快照跟着来回变,收录状态也在两个版本之间跳。

第一反应是「回源时命中两台源站机器,其中一台还是旧代码」,验证下来不成立。

原因不止一个,得分开看。节点缓存时间不一致,部分节点没收到刷新指令。另一种情况是刷新只提了单条地址,目录下的子路径没清。

不容易想到的是,缓存键包含机房标识,各节点各存一份。

第一件事是按节点对比响应内容

curl -s --resolve www.example.com:443:203.0.113.5 https://www.example.com/post/1024 | md5sum

然后按目录刷新而不是单条地址

curl -X PURGE https://www.example.com/post/

随后确认回源机器的版本一致

curl -s http://10.0.0.12/version; curl -s http://10.0.0.13/version

给响应加版本头便于核对

add_header X-Build "20261113-1" always;

恢复的判定其实很直接。各节点返回的内容哈希一致,响应头版本号相同,快照不再变化。

这里还有个坑。多节点环境里抽一个节点验证通过不代表全网通过,至少要覆盖两三个机房。如果同一现象隔几天又出现,说明根因没找到,别当偶发处理。

作者 9823189