apache缓存需分层配置:静态资源用mod_cache_disk磁盘缓存,小体积高频资源用mod_mem_cache内存缓存,动态内容依赖响应头控制,java应用需配合设置cache-control并统一静态路径,反向代理场景推荐mod_proxy+mod_cache组合。

Apache 缓存加速不是“一配就灵”的开关,而是要按资源类型、部署位置和性能目标来分层配置。核心思路是:静态资源走磁盘/内存缓存,动态内容靠响应头指导代理或浏览器缓存,Java等后端应用不直接参与Apache模块配置。
静态资源用 mod_cache_disk 做磁盘缓存
适合 CSS/JS/图片等不常变、体积适中的文件,命中后直接返回,不打后端。
-
确保启用模块(在
httpd.conf或站点配置中):LoadModule cache_module modules/mod_cache.so LoadModule cache_disk_module modules/mod_cache_disk.so LoadModule expires_module modules/mod_expires.so LoadModule headers_module modules/mod_headers.so
-
设置缓存根目录与路径规则:
<ifmodule mod_cache_disk.c> CacheRoot "/var/cache/apache2/mod_cache_disk" CacheEnable disk /static/ CacheIgnoreHeaders Set-Cookie CacheIgnoreNoLastMod On </ifmodule>
-
配合
mod_expires设定强缓存时间(提升复用率):<location> ExpiresActive On ExpiresByType text/css "access plus 1 year" ExpiresByType application/javascript "access plus 1 year" ExpiresByType image/jpg "access plus 1 month" ExpiresByType image/png "access plus 1 month" </location>
⚠️ 注意:
CacheRoot目录需存在且 Apache 进程有读写权限;首次访问不会缓存,第二次起才生效。
小体积高频资源用 mod_mem_cache 做内存缓存
适合 HTML 片段、小图标、API 返回的轻量 JSON(需配合 Cache-Control 头),响应更快但占内存。
-
启用模块:
LoadModule cache_module modules/mod_cache.so LoadModule mem_cache_module modules/mod_mem_cache.so
-
基础配置示例(单位为 KB):
<ifmodule mod_mem_cache.c> CacheEnable mem / MCacheSize 131072 # 最大使用内存:128MB MCacheMaxObjectCount 20000 MCacheMinObjectSize 10 MCacheMaxObjectSize 1048576 # 1MB MCacheRemovalAlgorithm LRU </ifmodule>
? 内存缓存对并发小、响应快的资源效果明显;但若后端返回带
Cache-Control: no-store或Set-Cookie,默认会被跳过。
Apache Superset Dashboard and SQL Exploration Skill下载Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
Java 应用配合缓存的关键动作
Java 本身不装 mod_cache,但必须“配合好”才能让 Apache 缓存生效:
-
在 Spring Boot 中设置响应头(例如 Controller 方法里):
response.setHeader("Cache-Control", "public, max-age=31536000"); response.setDateHeader("Expires", System.currentTimeMillis() + 31536000000L); 静态资源路径统一走
/static/或/assets/,便于 Apache 按 Location 规则拦截缓存;关键资源做版本化命名(如
app.a1b2c3.js),避免缓存更新问题;禁用开发环境自动加
no-cache的调试头(检查是否启用了WebMvcConfigurer.addResourceHandlers的默认配置)。
反向代理场景下缓存更稳当
如果 Java 应用跑在 Tomcat(8080),Apache 做前端(80),推荐用 mod_proxy + mod_cache 组合:
-
Apache 配置反向代理:
ProxyPass "/api/" "http://127.0.0.1:8080/api/" ProxyPassReverse "/api/" "http://127.0.0.1:8080/api/"
-
对
/api/下某些只读接口(如/api/config)单独启用缓存:<location> CacheEnable disk </location>
✅ 这样既保留了 Java 的业务灵活性,又把可缓存部分交给 Apache 统一管理,运维和排查都更清晰。
不复杂但容易忽略











