Apache mod_cache需配合mod_cache_disk和mod_proxy等模块协同工作,按序加载并配置CacheEnable路径、响应头及CacheRoot权限才能生效。

Apache mod_cache 不是“一开就缓存”的模块,它必须配合具体存储后端(如 mod_cache_disk)和代理模块(如 mod_proxy),并严格满足响应头规则,才能真正生效。配置失败的主因不是写错指令,而是漏掉关键协同环节。
必须同时启用的核心模块
缺一不可,且加载顺序不能颠倒:
-
mod_cache:缓存框架,必须最先加载 -
mod_cache_disk(或mod_cache_socache):提供实际存储能力,必须在mod_cache之后加载 - 若缓存后端接口(如 Spring Boot、PHP-FPM),还需
mod_proxy和mod_proxy_http - 建议启用
mod_headers,用于补全或覆盖不规范的响应头
验证是否加载成功:
Linux/macOS:apache2ctl -M | grep cache 或 httpd -M | grep cache
Windows(XAMPP):httpd -M | findstr cache
输出中必须同时出现 cache_module 和 cache_disk_module。
缓存路径与代理逻辑必须对齐
CacheEnable disk /api/ 中的路径,匹配的是 Apache 收到的原始请求路径,不是后端真实地址。
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
- 若配置了
ProxyPass /api/ http://localhost:8080/v1/,则应写CacheEnable disk /api/,而非/v1/ - 不建议直接写
CacheEnable disk /,易与静态资源、管理路径冲突 - 推荐从子路径起步,例如先试
CacheEnable disk /public-api/,命中稳定后再扩展
后端响应头是缓存生效的前提
Apache 默认跳过绝大多数动态响应——除非它们显式声明可共享、有时效、无用户私有状态:
- 必须含
Cache-Control: public, max-age=300(public关键,仅max-age=300无效) - 绝对不能含
Set-Cookie头(会直接拒绝缓存;可用CacheIgnoreHeaders Set-Cookie强制忽略,但需确认业务无状态) - 避免
Vary: *(使缓存键失效)和Cache-Control: private、no-store - 状态码需为默认可缓存类型:200、301、302 等;404、500 默认不缓存(不建议为 API 开启
CacheStorePrivate On)
检查真实响应头:curl -I https://your-domain.com/api/data,确认返回头符合要求。
磁盘缓存目录(CacheRoot)设置要点
这不是一个普通路径,而是一个需严格保障的本地缓存根目录:
- 路径须由 Apache 进程用户完全可读写(如
www-data或apache) - 剩余空间建议 ≥5GB;
mod_cache_disk不自动清理过期文件 - 禁止设在
/tmp、NFS、Samba、OneDrive 同步目录或 NTFS 加密文件夹 - Linux 示例:
CacheRoot /var/cache/apache2/mod_cache_disk,随后执行sudo chown www-data:www-data /var/cache/apache2/mod_cache_disk - Windows(XAMPP)示例:
CacheRoot "C:/xampp/apache/cache_disk",右键目录 → 安全 → 给当前用户「完全控制」权限

















