Apache 缓存需 mod_cache 与 mod_cache_disk 协同 proxy 模块工作,路径配置须匹配代理路径,缓存目录需可写且空间充足,响应头需设 Cache-Control: public 并忽略干扰头。

Apache 本身没有叫 ProxyCache 的独立模块,这是常见误解。真正起作用的是 mod_cache 框架配合 mod_cache_disk(或 mod_cache_socache)来缓存反向代理返回的静态资源。关键不是“给 proxy 配缓存”,而是让 mod_proxy 和 mod_cache_disk 协同工作,在代理路径上落地响应内容。
必须启用的核心模块
缺一不可,否则缓存完全不生效:
- mod_proxy 和 mod_proxy_http:负责把 /static/ 这类请求转发给后端(如 Tomcat、Node.js)
- mod_cache 和 mod_cache_disk:前者是缓存调度框架,后者才是真正把 JS/CSS/图片写入磁盘并复用的模块
-
mod_headers 或 mod_expires:用于补全或覆盖后端响应头。Java 默认不返回
Cache-Control: public,会导致 Apache 拒绝缓存
路径配置必须严格对齐
Apache 缓存只认它自己“看到”的 URL 路径,不是后端真实路径:
安全更新和维护 CLI Proxy API(CPA)部署与配置。用于 CPA 镜像升级、配置变更、认证目录兼容修复、上线验证与回滚。适用于用户提到“CPA 更新/升级/配置改了/容器重建/回滚”等场景。
- 如果配置了
ProxyPass /static/ http://127.0.0.1:8080/assets/,缓存指令必须写CacheEnable disk /static/,不能写/assets/ - 不要用
CacheEnable disk /尝试全局缓存——它对动态接口(如 /api/)基本无效,还可能干扰正常逻辑 - 建议统一静态资源入口,比如全部走
/static/,避免路径碎片化
磁盘缓存区要安全可写
缓存目录不是随便指定一个路径就行:
- 路径需由 Apache 进程用户(如
www-data或apache)完全可读写,例如:chown www-data:www-data /var/cache/apache2/mod_cache_disk - 剩余空间建议 ≥5GB——
mod_cache_disk不自动清理过期文件,磁盘满则缓存失败 - 禁止设在
/tmp、NFS、Samba 或杀毒软件高频扫描路径(Windows 下尤其注意)
响应头与缓存策略要协同
默认情况下,只要响应含 Set-Cookie、Cache-Control: private 或状态码非 200/301/404,就跳过缓存:
- 加
CacheIgnoreHeaders Set-Cookie,防止因无关 Cookie 头丢弃缓存 - 加
CacheIgnoreNoLastMod On,允许缓存无Last-Modified的构建产物(如 Webpack 打包的 JS) - 搭配
mod_expires设置浏览器长期缓存:ExpiresByType application/javascript "access plus 1 year" - Java 后端需确保返回
Cache-Control: public, max-age=31536000,否则 Apache 不会缓存

















