From 3841b188208358b8893713ba93a0947462a95825 Mon Sep 17 00:00:00 2001 From: jknapp Date: Mon, 21 Sep 2026 06:55:02 -0700 Subject: [PATCH] fix(shared-ols): enableCache 0 so headerless responses are never cached LSCWP's Divi compat disables the plugin for ?et_fb= / ?et_pb_preview= / ?preview=true, so those responses carry no X-LiteSpeed-Cache-Control header. With module-level enableCache 1, OLS cached them anyway (Divi Visual Builder pages served from cache; the plugin's own QS exclusion never runs). enableCache 0 caches only responses that opt in via an explicit X-LiteSpeed-Cache-Control: public header. Measured on OLS 1.8.4: headerless = miss,hit under 1 / not cached under 0; explicit public cached under both. Matches the dedicated cac-litespeed tier. Co-Authored-By: Claude Sonnet 5 --- configs/shared-ols/httpd_config_base.tpl | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/configs/shared-ols/httpd_config_base.tpl b/configs/shared-ols/httpd_config_base.tpl index 6158943..eb41c57 100644 --- a/configs/shared-ols/httpd_config_base.tpl +++ b/configs/shared-ols/httpd_config_base.tpl @@ -23,10 +23,22 @@ useIpInProxyHeader 1 ## LSCache enabled at MODULE scope for the whole tier (dedicated cache volume, ## ephemeral across rebuilds; OLS auto-keys a per-vhost subdir under storagePath). -## PUBLIC (anonymous) caching ONLY: enableCache 1 + checkPublicCache 1 let OLS -## serve cacheable, non-logged-in responses marked by the LiteSpeed Cache WP +## PUBLIC (anonymous) caching ONLY: checkPublicCache 1 lets OLS serve cacheable, +## non-logged-in responses that are EXPLICITLY marked by the LiteSpeed Cache WP ## plugin's X-LiteSpeed-Cache-Control headers (ignoreRespCacheCtrl=0 honors them). ## +## enableCache is 0 ON PURPOSE. At module scope enableCache 1 means "cache every +## cacheable-looking public response by default", INCLUDING ones that carry no +## cache header at all. That bit us on Divi: LSCWP's Divi compat calls +## litespeed_disable_all for ?et_fb= / ?et_pb_preview= / ?p=N&preview=true, which +## switches the plugin off for the request, so it sends NO header (and its own +## "Do Not Cache Query Strings" never runs) — and OLS stored the Visual Builder +## page under enableCache 1. With enableCache 0 only responses that opt in via +## X-LiteSpeed-Cache-Control: public are stored; a plugin-disabled request is +## simply not cached. Measured on OLS 1.8.4 (2026-09-21): headerless response = +## miss,hit under 1; not cached under 0; explicit `public` header cached under +## both. Matches the dedicated cac-litespeed tier (configs/litespeed/site-template.tpl). +## ## PRIVATE caching is intentionally OFF (enablePrivateCache 0 + checkPrivateCache 0). ## Logged-in / cookie-bearing pages must NEVER be cached at the tier. We previously ## left enablePrivateCache=1 assuming "no plugin -> nothing cached," but that was @@ -45,7 +57,7 @@ module cache { respCookieCache 1 ignoreReqCacheCtrl 0 ignoreRespCacheCtrl 0 - enableCache 1 + enableCache 0 enablePrivateCache 0 } ## ---- end shared-ols server append ----