Varnish 4配置下WooCommerce迷你购物车添加商品失效求解决方案
修复方案
1. 删除错误的参数清理规则
你当前VCL里的这行代码会把加购请求的核心参数删掉,直接导致后端无法识别加购操作,直接删除即可:
set req.url = regsub(req.url, "add-to-cart=\d+_\d+&", "");
2. 补全WooCommerce AJAX请求跳过缓存规则
当前你配置的WooCommerce免缓存路径漏了wc-ajax接口,这是现在WooCommerce处理前端异步加购、更新购物车的核心接口,需要加到免缓存列表中。修改sub vcl_recv里的对应规则:
原规则:
if (req.url ~ "/(cart|my-account|wc-api|checkout|addons|/?add-to-cart=)") { return (pass); }
修改为:
if (req.url ~ "/(cart|my-account|wc-api|wc-ajax|checkout|addons|/?add-to-cart=)") { return (pass); }
3. 放开WooCommerce页面的Cookie下发限制
你当前sub vcl_backend_response中仅允许后台/登录页下发Cookie,会导致WooCommerce生成的购物车标识Cookie(woocommerce_cart_hash、woocommerce_items_in_cart等)被拦截,前端无法拿到最新的购物车状态。修改对应规则:
原规则:
if (beresp.http.Set-Cookie && bereq.url !~ "^/wp-(login|admin)" && bereq.url !~ "((wp/)?wp-(login|admin)|login)") { unset beresp.http.Set-Cookie; }
修改为:
if (beresp.http.Set-Cookie && bereq.url !~ "^/wp-(login|admin)" && bereq.url !~ "((wp/)?wp-(login|admin)|login)" && bereq.url !~ "/(cart|my-account|wc-api|wc-ajax|checkout|addons|/?add-to-cart=)") { unset beresp.http.Set-Cookie; }
4. 操作验证
修改完成后重载Varnish配置,清空浏览器缓存测试即可,无需调整其他现有配置。
内容的提问来源于stack exchange,提问作者Oratios
相关产品推荐
相关产品推荐

