这个坑值得记一笔。WordPress 站用 LiteSpeed Cache,登录后的个人中心偶尔显示成上一个用户的头像。响应头里能看到 X-LiteSpeed-Cache: hit,缓存策略是 public。

刚开始盯着「缓存插件的排除规则只写了 /wp-admin,漏了自定义路径」,折腾了半个多小时,排掉了。

这类报错背后常见的原因有几处,逐个排除就行。个人中心页面没有设置 no-cache,被当成公共页面缓存;ESI 片段按 URL 缓存,没带用户维度;CDN 前面还有一层,把带 Set-Cookie 的响应也缓存了。

上来先确认响应头里的缓存策略

curl -sI https://www.example.com/my/ | egrep -i 'x-litespeed|cache-control|set-cookie'

给登录态页面下发 no-cache

header('Cache-Control: no-store, private');

接着在插件里排除个人中心路径

curl -s https://www.example.com/wp-json/litespeed/v1/config | jq '.excludes'

复验登录与未登录两种请求

curl -s -b 'wordpress_logged_in=xxx' -sI https://www.example.com/my/ | grep -i cache

别只看报错消失,验证要多做一步。登录态响应不再带 public 缓存标记,个人中心刷新后显示正确用户,边缘也不再出现串号投诉。

缓存策略要按页面性质分,凡是带用户数据的页面一律 private,别指望前面几层缓存自己判断。报错文案容易误导,真正的原因往往在相邻那一层的日志里。

作者 9823189