整页缓存上线之后购物车数量一直是 0,加购的时候提示成功,刷新一下还是空的,把缓存关掉马上恢复正常。日志里能对上时间点,这种反而好排。
购物车数量直接渲染在页面的 HTML 里,属于跟着用户走的动态内容,被整页缓存成了一份所有人共用的副本,自然就整个冻住了。这一点先确认清楚,后面就不用反复试。
location ~* /(cart|checkout|my-account)/ {
proxy_no_cache 1;
add_header Cache-Control 'private';
}
「购物车被整页缓存」确认了原因之后,改动尽量只碰那一处,顺手改的东西后面最容易出问题。先做最小复现,能稳定跑出来的问题,排查成本会低一个数量级。
别只看报错的最后一行,往上看几行,真正的起因通常在上面。
处理上按这个顺序:购物车和结算这两类路径,整段排除出缓存规则;数量块改由前端单独发请求去拿,别跟着页面一起发;购物车接口的响应头统一加上 private,禁止被共享缓存。
结果对不对很好判断,加购之后刷新一下数量立刻递增,换个浏览器也不会互相影响。
