apache mod_cache未启用本质是配置链断裂,须同时加载mod_cache、mod_cache_disk、mod_proxy、mod_proxy_http模块,确保cacheenable路径与proxypass一致,后端返回public+max-age响应头,且cacheroot权限正确、空间充足。
apache 的 mod_cache 模块未启用,根本不是“缓存失效”,而是“压根没缓存”——所有请求都直通后端,自然没有命中、没有过期、也没有洪峰放大问题。所谓“缓存失效故障”,实际是配置链断裂导致缓存功能完全缺失。修复重点在于补全模块依赖、对齐路径逻辑、校验响应头规则。
确认并启用核心模块组合
mod_cache 本身只是框架,必须搭配存储后端和代理模块才能工作。缺一不可:
-
必须同时加载:
mod_cache(最先)、mod_cache_disk(或mod_cache_socache)、mod_proxy和mod_proxy_http - Debian/Ubuntu 执行:
a2enmod cache cache_disk proxy proxy_http,再重启 Apache - RHEL/CentOS 检查
/etc/httpd/conf.modules.d/00-base.conf中四行LoadModule均未被注释 - 验证命令:
apache2ctl -M | grep -E 'cache|proxy',输出中应同时出现cache_module、cache_disk_module、proxy_module、proxy_http_module
检查 CacheEnable 路径与代理规则是否匹配
缓存路径不是写后端地址,而是 Apache 收到的原始请求路径:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
- 若配置了
ProxyPass /api/ http://localhost:8080/v1/,缓存指令必须写CacheEnable disk /api/,而非/v1/ - 避免用
CacheEnable disk /全局开启,易误缓存管理接口或带 Cookie 的登录页 - 建议先从子路径测试,例如
CacheEnable disk /public-api/,确认X-Cache: HIT出现后再扩展
确保后端响应头满足缓存前提
Apache 默认跳过绝大多数动态响应,仅当响应头明确允许时才缓存:
- 响应必须含
Cache-Control: public, max-age=300(public关键,单写max-age无效) - 不能含
Set-Cookie头(否则直接拒绝缓存;可加CacheIgnoreHeaders Set-Cookie强制忽略,但需确认业务无状态) - 状态码需为默认可缓存类型:200、301、302 等;404、500 默认不缓存
- 用
curl -I https://your-domain.com/api/data实际抓包,确认返回头符合要求
验证缓存目录权限与磁盘空间
缓存写入失败不会报错,只会静默跳过:
-
CacheRoot /var/cache/apache2/mod_cache_disk目录必须由 Apache 进程用户(如www-data)可读写 - 执行:
chown www-data:www-data /var/cache/apache2/mod_cache_disk,并确保剩余空间 ≥5GB - 禁止设在
/tmp或 NFS 挂载点——前者可能被系统清理,后者会引发原子操作异常 - 检查 Apache 错误日志:
tail -f /var/log/apache2/error.log,留意(13) Permission denied类报错










