mod_cache_disk 是 Apache HTTP Server 的原生磁盘缓存模块,非 Java 技术,通过反向代理与 Java 应用协作;需启用相关模块、配置缓存目录及响应头以确保缓存生效。

Apache 的 mod_cache_disk 模块本身**不是 Java 技术**,也不由 Apache Software Foundation 的 Java 项目(如 Commons、Tomcat 等)提供。它属于 **Apache HTTP Server(即 httpd)** 的原生模块,用于在 Web 服务器层面对静态或代理响应内容进行磁盘缓存,从而减轻后端(包括 Java 应用服务器如 Tomcat、Jetty)压力。
明确技术边界:Java 和 mod_cache_disk 不直接联动
Java 应用(如 Spring Boot、Servlet 应用)运行在应用服务器中,而 mod_cache_disk 运行在前置的 Apache HTTP Server 中。两者通过反向代理(如 mod_proxy)协作:
- 用户请求 → Apache httpd 接收
- Apache 判断是否命中磁盘缓存(
mod_cache_disk) - 若未命中,Apache 将请求转发给后端 Java 服务(如
http://localhost:8080) - Java 返回响应后,Apache 可根据配置决定是否将响应缓存到磁盘
启用 mod_cache_disk 的关键配置要点
需确保以下模块已加载(通常在 httpd.conf 或 mods-enabled/ 中启用):
-
mod_cache(缓存核心) -
mod_cache_disk(磁盘存储引擎) -
mod_proxy和mod_proxy_http(用于反向代理 Java 后端) -
mod_expires或mod_headers(控制缓存策略,影响是否可缓存)
典型缓存目录配置示例:
立即学习“Java免费学习笔记(深入)”;
CacheRoot "/var/cache/apache2/mod_cache_disk" CacheDirLevels 2 CacheDirLength 1
注意:CacheRoot 目录需由 Apache 进程(如 www-data)有读写权限,且建议使用独立磁盘或 SSD 提升 I/O 性能。
让 Java 响应支持被缓存的关键措施
Apache 默认只缓存满足严格条件的响应(如含 Cache-Control 或 Expires 头,且状态码为 200/301/404 等)。Java 应用需主动配合:
- 设置合理响应头:例如在 Spring MVC 中使用
@ResponseHeader("Cache-Control", "public, max-age=3600") - 避免动态内容误缓存:对含用户身份、CSRF Token 或实时数据的接口,返回
Cache-Control: private, no-store - 对静态资源(JS/CSS/图片),建议由 Apache 直接托管,或通过
mod_expires统一设置过期策略
验证与调优建议
可通过以下方式确认缓存生效:
- 查看响应头是否含
X-Cache: HIT from example.com(需启用CacheIgnoreNoLastMod Off并配置日志格式) - 检查
CacheRoot目录下是否有生成的缓存文件(结构为 hash 分级子目录) - 监控磁盘 I/O 和 inode 使用量,避免小文件过多导致性能下降
- 结合
mod_cache_socache使用共享对象缓存(如 memcache、Redis)提升元数据查找效率
不复杂但容易忽略:缓存行为高度依赖 HTTP 协议语义,Java 后端输出的响应头比 Apache 配置更早决定“能否缓存”。










