必须让mod_proxy与mod_cache_disk协同工作才能缓存后端静态资源,缺一不可;cacheenable路径须与proxypass路径一致(如proxypass /static/则cacheenable disk /static/),且java响应头必须含cache-control: public, max-age=n。

Apache 本身不缓存,反向代理只是转发请求。要缓存后端静态资源,必须让 mod_proxy 和 mod_cache_disk 协同工作:前者负责把请求发给后端(比如 Tomcat),后者把响应内容落地到磁盘并复用。
必须启用的核心模块
缺一不可,否则缓存完全不生效:
-
mod_proxy和mod_proxy_http:实现反向代理,把/static/这类路径转发给 Java 后端 -
mod_cache和mod_cache_disk:提供磁盘缓存能力,真正存储响应体 -
mod_headers或mod_expires:补全或修正后端返回的缓存头(Java 默认不返回public,会导致缓存被拒)
路径配置必须严格对齐
Apache 缓存只认它自己“看到”的 URL 路径,不是后端真实路径:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
- 如果配置了
ProxyPass /static/ http://127.0.0.1:8080/assets/,缓存指令就得写CacheEnable disk /static/,不能写/assets/ - 不要用
CacheEnable disk /尝试全局缓存——它对被代理的动态响应无效 - 建议统一静态资源入口,比如全部走
/static/或/assets/,避免路径碎片化
缓存能生效的关键响应头
Apache mod_cache_disk 对响应头非常严格:
- 必须包含
Cache-Control: public, max-age=3600(不能只有max-age,缺public就不缓存) - 带哈希指纹的文件(如
app.a1b2c3.js)可设为强缓存:Cache-Control: public, max-age=31536000, immutable - 上传类资源(如
/uploads/report.pdf)建议设协商缓存,并确保后端返回ETag或Last-Modified
磁盘缓存基础配置示例
在 httpd.conf 或虚拟主机配置中加入:
<ifmodule mod_cache_disk.c>
CacheRoot "/var/cache/apache2/mod_cache_disk"
CacheEnable disk /static/
CacheIgnoreHeaders Set-Cookie
CacheIgnoreNoLastMod On
</ifmodule>
注意:/var/cache/apache2/mod_cache_disk 目录需由 Apache 进程用户(如 www-data 或 apache)可读写,且提前创建好。










