mod_cache_socache并非独立模块,而是mod_cache的后端驱动,仅缓存元数据(如etag、过期时间)到共享内存,不存响应体;需配合socache提供器(如shmcb、memcache)使用,重启后元数据丢失。

mod_cache_socache 本身并不存在——Apache 官方模块中没有名为 mod_cache_socache 的模块。这是一个常见误解,源于对两个独立但可协同工作的模块的混淆:
✅ 正确组合是:mod_cache(缓存逻辑控制器) + mod_socache_memcache 或 mod_socache_redis(共享对象缓存后端)。
在分布式 Apache 部署中(如多台 Web 服务器负载均衡),若需统一管理小文件(如图标、字体、JSON API 响应等)的内存级缓存,关键不是“mod_cache_socache”,而是用 mod_cache 将缓存决策与存储分离,并将底层缓存存储委托给支持跨节点共享的 socache 提供者(如 Memcached 或 Redis)。这样,所有 Apache 实例共用同一份缓存数据,避免重复生成和本地内存浪费。
启用共享内存缓存后端(以 Memcached 为例)
1. 确保已安装并运行 Memcached 服务(如监听 127.0.0.1:11211);
2. 启用必要模块:
LoadModule cache_module modules/mod_cache.soLoadModule socache_memcache_module modules/mod_socache_memcache.soLoadModule cache_socache_module modules/mod_cache_socache.so
3. 全局配置 socache 共享池:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
<ifmodule mod_socache_memcache.c> SocacheMemcacheServer "127.0.0.1:11211" SocacheMemcacheConnTTL 30 </ifmodule>
配置 mod_cache 使用 socache 存储小文件响应
针对高频、低体积、高一致性要求的小文件(如 .ico、.woff2、/api/status),推荐如下配置:
- 使用
CacheEnable socache /启用基于 socache 的全局缓存(非 disk/mem); - 通过
<locationmatch></locationmatch>精确匹配小文件路径或 MIME 类型; - 设置短 TTL(如 60–300 秒),兼顾新鲜度与复用率;
- 显式忽略影响缓存的头字段(如
Set-Cookie、Vary中不必要字段); - 强制缓存成功状态码(200/304),跳过 4xx/5xx 响应。
示例:
<ifmodule mod_cache.c>
CacheIgnoreHeaders Set-Cookie Vary
CacheIgnoreNoLastMod On
CacheQuickHandler off
<locationmatch>
CacheEnable socache /
CacheHeader on
CacheLock on
CacheLockPath "/tmp/cache-lock"
CacheMaxExpire 300
CacheIgnoreCacheControl On
Header set Cache-Control "public, max-age=300, stale-while-revalidate=60"
</locationmatch></ifmodule>
优化小文件缓存的关键细节
• 避免缓存爆炸:socache 不自动清理过期项,依赖后端(如 Memcached 的 LRU)自动驱逐。务必为 Memcached 分配合理内存(如 -m 512),并监控命中率(stats 命令中的 get_hits/get_commands);
• 控制缓存键粒度:默认键含 Host + URI + Query String。若小文件 URL 带无意义参数(如 ?v=123),用 CacheIgnoreQuery On 或 RewriteCond 规范化请求;
• 防止缓存污染:小文件常被 CDN 或浏览器强缓存,Apache socache 层宜专注“中间层快速响应”,不替代边缘缓存,建议 TTL ≤ CDN 缓存时间;
• 验证缓存生效:检查响应头是否含 X-Cache: HIT(需启用 CacheHeader on),并确认 Memcached 中有对应 key(如用 memcdump 工具)。
替代方案对比(Redis vs Memcached)
• Memcached:轻量、高性能、多线程、原生支持 LRU,适合纯 key-value 小文件缓存;
• Redis:需启用 mod_socache_redis(非官方核心模块,需单独编译),支持 TTL 精确控制、持久化和复杂数据结构,适合需缓存带元数据的小文件(如附带 ETag 校验值);
• 不推荐 mod_cache_mem:它是进程内内存缓存,无法跨 Apache worker 共享,更不支持分布式。










