mod_cache本身不缓存,需配合mod_cache_disk或mod_cache_socache等后端模块才能生效;必须正确加载二者、设置可写cacheroot、仅对静态路径启用缓存并忽略干扰头。

Apache 的 mod_cache 本身不缓存,它只是缓存框架;真正起效的是配合使用的后端模块(如 mod_cache_disk 或 mod_cache_socache)。要加速静态资源(JS、CSS、图片、字体等),关键不是“打开缓存”,而是让缓存只落在该落的地方、能稳定写入、且不被响应头或路径逻辑绕过。
必须先启用并验证两个核心模块
mod_cache 是基础框架,mod_cache_disk(磁盘)或 mod_cache_socache(内存/共享)是存储后端——二者缺一不可,且加载顺序不能错。
- Debian/Ubuntu:运行
a2enmod cache cache_disk,再重启 Apache - RHEL/CentOS:检查
/etc/httpd/conf.modules.d/00-base.conf中这两行未被注释:LoadModule cache_module modules/mod_cache.soLoadModule cache_disk_module modules/mod_cache_disk.so - Windows(如 phpEnv):确认
httpd.conf中先加载mod_cache.so,再加载mod_cache_disk.so,且文件真实存在 - 验证是否成功:执行
apache2ctl -M | grep cache或httpd -M | grep cache,应同时输出cache_module和cache_disk_module
CacheRoot 要安全、可写、本地化
缓存目录不是随便指定一个路径就行。它直接影响命中率与服务稳定性。
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
- 路径需由 Apache 进程用户(如
www-data或apache)完全可读写,例如:chown www-data:www-data /var/cache/apache2/mod_cache_disk - 剩余空间建议 ≥5GB——
mod_cache_disk不自动清理过期文件,只按策略决定是否写入,磁盘满则缓存失败 - 禁止设在
/tmp、用户临时目录或杀毒软件高频扫描路径(Windows 下尤其注意) - 严禁使用 NFS、Samba 或 FUSE 挂载点——原子重命名操作会失败,导致缓存损坏或性能断崖式下降
只对明确路径启用缓存,并处理干扰头
默认情况下,只要响应含 Set-Cookie、Cache-Control: private/no-store 或状态码非 200/301/404,就跳过缓存。静态资源通常不带 Cookie,但常被后端或 CMS 注入干扰头。
- 推荐专为静态资源建路径前缀,比如统一放在
/static/或/assets/,然后只对这个路径启用缓存:CacheEnable disk /static/ - 加
CacheIgnoreHeaders Set-Cookie防止因无关 Cookie 头丢弃缓存 - 加
CacheIgnoreNoLastMod On允许缓存无Last-Modified的资源(常见于构建产物) - 搭配
mod_expires和mod_headers设置长过期与Vary头,提升浏览器复用率
别依赖 mod_proxy 实现“分布式缓存”
mod_proxy 只负责反向代理转发,本身不缓存。所谓“二级缓存”是误传——它只是让 mod_cache 能触达后端动态服务的通道。各 Apache 实例缓存彼此独立,无同步机制。
- 若你用 Apache 前置代理 Java 应用(如 Tomcat),仍需在本机启用
mod_cache_disk并配置CacheEnable disk /static/ - 反向代理规则示例:
ProxyPass /static/ http://localhost:8080/static/ - 缓存行为仅发生在当前 Apache 实例本地,不跨节点










