Apache反向代理需mod_proxy与mod_cache_disk协同实现静态资源磁盘缓存,必须启用mod_proxy、mod_proxy_http、mod_cache、mod_cache_disk及mod_headers/mod_expires,并严格按代理路径配置CacheEnable,确保缓存目录权限正确、空间充足且避免特殊文件系统。
apache 反向代理本身不缓存,要加速静态资源(如 js、css、图片),必须让 mod_proxy 和 mod_cache_disk 协同工作——前者转发请求,后者把后端响应落地到磁盘并复用。
必须启用的核心模块
缺一不可,否则缓存完全不生效:
-
mod_proxy和mod_proxy_http:负责把/static/这类路径转发给后端(如 Tomcat、Node.js) -
mod_cache和mod_cache_disk:前者是缓存调度框架,后者才是真正写入磁盘并读取的模块 -
mod_headers或mod_expires:用于补全或覆盖后端响应头(Java 默认不返回Cache-Control: public,会导致缓存被拒)
路径配置必须严格对齐
Apache 缓存只认它自己“看到”的 URL 路径,不是后端真实路径:
- 如果配置了
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) - Java 后端需确保返回
Cache-Control: public, max-age=31536000,否则 Apache 不会缓存 - 搭配
mod_expires设置浏览器长期缓存:ExpiresByType application/javascript "access plus 1 year"











