mod_cache_socache 本身不加速响应体返回,需与 mod_cache_disk 配合并关闭 CacheQuickHandler 才有效;它缓存元数据提升索引速度,disk 缓存响应内容,二者协同实现热点数据加速。

直接用 mod_cache_socache 本身并不能提升响应体的返回速度,它只缓存元数据(如 ETag、Last-Modified、过期时间),不存响应内容。真正加速热点数据响应,关键在于把它和磁盘缓存配合使用,并关闭干扰机制。
必须搭配 mod_cache_disk 才有实际效果
mod_cache_socache 是“缓存索引”,mod_cache_disk 是“缓存货物”。没有后者,所有请求仍要读磁盘或回源:
- 配置
CacheEnable disk /path/to/cache启用主缓存,响应体才真正落地 -
mod_cache_socache此时负责快速判断:该 URL 是否命中、是否过期、是否需校验——省掉每次打开缓存文件读头信息的开销 - 高并发下,元数据查共享内存比查磁盘文件快一个数量级,尤其在成百上千请求同时抵达同一热点 URL 时
务必关闭 CacheQuickHandler
Apache 默认开启 CacheQuickHandler on,这会让绝大多数请求在进入缓存逻辑前就被截断,导致 mod_cache_socache 完全不运行:
- 必须在 Server Config 或 VirtualHost 级别写:
CacheQuickHandler off - 该指令不能放在
<location></location>或<directory></directory>块里,否则无效 - 不关它,你永远看不到
X-Cache: HIT响应头,也测不到性能提升
合理配置 CacheSocache 和忽略干扰头
元数据缓存要轻量、聚焦、抗碎片:
- 用
CacheSocache shmcb:/apache-socache(512000)—— 512KB 足够支撑约 2000 个活跃 URL 的元数据,过大无益 - 加
CacheIgnoreHeaders Set-Cookie:防止带 Cookie 的请求生成独立缓存键,避免缓存分裂 - 若为 API 网关层统一鉴权,可追加
CacheIgnoreHeaders Authorization - 慎用
CacheIgnoreHeaders User-Agent:仅当后端不按 UA 返回不同内容时才启用
验证是否真起作用
不要只看配置,要观察行为:
- 压测热点 URL(如
ab -n 100 -c 50 http://site/api/status),检查后端 access log 请求次数 —— 应远少于并发数(说明缓存命中+锁生效) - 响应头中出现
X-Cache: HIT或X-Cache: STALE才算走通缓存链路 - 错误日志里搜
cache lock acquired(需LogLevel debug)可确认锁机制是否激活 - 重启 Apache 后首波请求必 MISS,属正常现象;持续 MISS 则大概率是
CacheQuickHandler没关或模块加载顺序错


















