mod_cache与mod_disk_cache必须协同工作才能生效,前者是缓存框架,后者是磁盘存储实现;需按序加载、配置匹配路径、确保CacheRoot本地可写且空间充足、响应头含Cache-Control: public且无Set-Cookie,并通过X-Cache响应头验证命中。`mod_cache` 和 `mod_disk_cache` 不是“启用了就能缓存”的模块,它们必须协同工作、路径对齐、权限到位、响应头合规,才能真正提升静态或动态资源的访问性能。单独启用其中一个,或配置路径/权限/头信息有误,缓存基本不会生效。
必须同时启用并验证两个模块
apache 的缓存能力由两层构成:mod_cache 是调度框架,mod_disk_cache(注意不是 mod_cache_disk)才是磁盘存储实现——这是很多教程混淆的关键点(2026年资料已明确区分命名)。早期 apache 2.2 使用 mod_disk_cache,2.4 后官方推荐 mod_cache_disk,但部分发行版(如较新 debian/ubuntu)仍保留 mod_disk_cache 模块名,需按实际模块文件名操作。
确认方式:
- Linux:运行
apache2ctl -M | grep -E "(cache|disk)"或httpd -M | grep -E "(cache|disk)",应同时看到cache_module和disk_cache_module(或cache_disk_module) - Debian/Ubuntu:执行
a2enmod cache disk_cache(若存在该模块)或a2enmod cache cache_disk(主流 2.4.62+ 推荐) - RHEL/CentOS:检查
/etc/httpd/conf.modules.d/00-base.conf中是否启用:LoadModule cache_module modules/mod_cache.so<br>LoadModule disk_cache_module modules/mod_disk_cache.so
或对应cache_disk_module行
CacheRoot 必须本地、可写、空间充足
缓存目录不是挂个路径就行。它必须满足三个硬性条件:
- 本地文件系统:禁止 NFS、Samba、OneDrive、NTFS 加密卷、FUSE 挂载点——mod_disk_cache 依赖原子重命名,跨网络或特殊文件系统会失败
-
进程用户完全可读写:例如 www-data(Debian/Ubuntu)或 apache(RHEL/CentOS),执行:
sudo mkdir -p /var/cache/apache2/diskcachesudo chown www-data:www-data /var/cache/apache2/diskcachesudo chmod 750 /var/cache/apache2/diskcache - 剩余空间 ≥5GB:mod_disk_cache 不自动清理过期文件,仅按策略决定是否写入;磁盘满则后续缓存全部静默失败
只对目标路径启用,并处理干扰响应头
缓存不生效最常见的原因是:Apache 默认跳过含 Set-Cookie、Cache-Control: private、无 Last-Modified 或状态码非 200/301/404 的响应。静态资源通常没问题,但动态页面或代理接口常被干扰。
Apache 2.4.62 官方 tar.gz 源码包是 Linux 及类 Unix 系统构建 Web 服务器的核心基础。通过源码编译安装,开发者能够灵活定制模块、优化性能并精准控制安装路径,满足多样化的业务需求。
推荐做法:
- 为静态资源统一设前缀,如
/static/,然后只缓存它:CacheEnable disk /static/ - 忽略无关 Cookie 头(适用于公共页面):
CacheIgnoreHeaders Set-Cookie - 允许缓存无时间戳的构建产物:
CacheIgnoreNoLastMod On - 配合
mod_expires主动注入强缓存头(比依赖后端更可控):ExpiresByType text/css "access plus 1 month"
验证是否真正命中缓存
不能只看配置没报错。要确认缓存起效,必须检查真实响应头或日志:
- 用 curl 查看响应头:
curl -I https://yoursite.com/static/main.css
成功时应看到X-Cache: HIT from your-server或类似标识(需开启CacheIgnoreHeaders后才稳定出现) - 查看 Apache error.log(调高 LogLevel):
LogLevel cache:trace4可记录缓存决策过程,比如 “not caching response due to Set-Cookie” 就说明被拦截了 - 观察磁盘目录:
ls -l /var/cache/apache2/diskcache/,有子目录和文件生成,说明写入成功










