启用 mod_cache_disk 需确保模块加载顺序正确(cache_module 在前)、磁盘目录合规(ext4/xfs、权限正确、空间充足)、路径配置精准(如 CacheEnable disk /static-test/)、响应头可缓存(Last-Modified/ETag),缺一环则静默失效。
启用 mod_cache_disk 不是简单打开开关,而是要确保整个缓存链路完整就位:模块加载正确、磁盘环境合规、路径配置精准、响应头可缓存。缺一环,缓存就静默失效。
确认并加载必要模块
Apache 缓存依赖模块间的严格顺序和协同:
- 必须同时启用
cache_module(缓存框架)和cache_disk_module(磁盘后端),且cache_module必须在前 - 检查配置文件(如
/etc/apache2/apache2.conf或/etc/httpd/conf/httpd.conf),确保有且仅有这两行,并未注释:LoadModule cache_module modules/mod_cache.so<br>LoadModule cache_disk_module modules/mod_cache_disk.so
- 重启服务后运行
apache2ctl -M | grep cache(Debian/Ubuntu)或httpd -M | grep cache(RHEL/CentOS),输出应同时包含cache_module和cache_disk_module - 禁用可能干扰的模块(如
mod_file_cache),它与mod_cache语义冲突,不参与标准 HTTP 缓存流程
准备合规的缓存目录
mod_cache_disk 对磁盘环境极为敏感,不报错但会直接跳过写入:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
- 清空旧缓存:
rm -rf /var/cache/apache2/mod_cache_disk/*(路径以你实际CacheRoot为准) - 重建目录并赋权:
mkdir -p /var/cache/apache2/mod_cache_disk && chown www-data:www-data /var/cache/apache2/mod_cache_disk(Ubuntu/Debian)或chown apache:apache /var/cache/apache2/mod_cache_disk(RHEL/CentOS) - 运行
df -T /var/cache/apache2/mod_cache_disk,确认文件系统类型为ext4或xfs;禁止 NFS、CIFS、FUSE 等网络或用户态文件系统 - 保留至少 5GB 可用空间——该模块不自动清理过期项,空间满则全部缓存停摆
配置最小可行缓存路径
避免一上来就配 CacheEnable disk /,先锁定一个可控静态路径验证通路:
- 在网站根目录下新建测试路径,例如
/var/www/html/static-test/,放入一个test.jpg - 在配置中仅启用该路径:
<IfModule mod_cache_disk.c><br> CacheRoot "/var/cache/apache2/mod_cache_disk"<br> CacheEnable disk /static-test/<br> CacheIgnoreHeaders Set-Cookie<br> CacheIgnoreNoLastMod On<br></IfModule>
- 确保该路径下资源返回合法的
Last-Modified或ETag头;若无,可配合mod_headers注入,否则缓存无法建立
验证缓存是否真正生效
不能只看配置是否加载,要观察真实请求行为:
- 首次访问
/static-test/test.jpg后,检查缓存目录是否生成子目录及文件:find /var/cache/apache2/mod_cache_disk -type f | head -3 - 用
curl -I查看响应头,确认出现X-Cache: HIT或X-Cache-Detail类似字段(需开启CacheIgnoreHeaders并配置日志级别) - 对比两次请求的
Age响应头值是否递增,或Server头后是否追加了cached标识(部分 Apache 版本支持) - 注意:
Cache-Control: no-cache或private会直接阻止缓存,Java 后端需统一控制响应头策略


















