apache的mod_cache_socache不缓存响应体,仅提供共享内存后端,必须与mod_cache框架及socache实现模块(如mod_socache_shmcb)按序加载配合使用,通过cacheenable socache在路径级启用。
apache 的 mod_cache_socache 本身不直接缓存响应体,它提供的是共享内存(shared object cache)的存储后端,必须和 mod_cache 框架配合使用,才能实现基于内存的 http 响应缓存。单纯启用 socache 模块不会自动缓存任何内容。
确认并加载必要模块
必须按顺序加载以下三个模块,缺一不可:
-
mod_cache.so:缓存框架,必须最先加载 -
mod_cache_socache.so:共享对象缓存后端,依赖 mod_cache -
mod_socache_shmcb.so(或mod_socache_memcache.so等):实际的 socache 实现模块,用于提供底层共享内存支持
在配置文件中确保这三行未被注释,且顺序正确(尤其 mod_cache 必须在最前):
LoadModule socache_shmcb_module modules/mod_socache_shmcb.so
LoadModule cache_socache_module modules/mod_cache_socache.so
配置 socache 存储参数
全局范围内定义共享缓存类型与容量,通常放在 <ifmodule mod_cache_socache.c></ifmodule> 块内:
-
CacheSocache shmcb:/path/to/cache-file(102400):使用 shmcb 实现,括号内为最大缓存条目数(非字节数),路径可为任意本地文件(仅作标识,不实际写入) -
CacheSocacheMaxSize 1048576:单个缓存条目的最大字节数(如 1MB),建议设为 512KB–2MB 之间
注意:shmcb 是 Apache 自带、无需额外安装的默认实现,适合中小规模部署;生产环境若需跨进程/多服务器共享,才考虑 memcache 或 redis 后端。
启用路径级缓存并指定后端
在 <location></location> 或 <proxy></proxy> 块中启用缓存,明确指向 socache:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
CacheEnable socache
CacheIgnoreHeaders Set-Cookie
CacheHeader on
关键点:
-
CacheEnable socache表示该路径只走共享内存缓存,不落盘 - CacheEnable disk,但需确保
mod_cache_disk已加载且CacheRoot可写 - Cache-Control: public, max-age=60 是基本要求;含
Set-Cookie或Vary: *会绕过缓存,可用CacheIgnoreHeaders显式忽略(需业务确认无状态)
验证是否生效
重启 Apache 后执行:
httpd -M | grep -E "(cache|socache)"输出中应同时包含:
cache_module (shared)
cache_socache_module (shared)socache_shmcb_module (shared)
再用 curl -I https://your-domain.com/api/data 检查响应头是否新增 <code>X-Cache: HIT 或 X-Cache-Detail 字段(需开启 CacheHeader on),这是缓存真正起效的直接证据。










