mod_cache_disk需模块协同、路径合规、响应可控三者齐备才能生效:先加载mod_cache再加载mod_cache_disk,cacheroot须本地可写且空间充足,仅对明确路径如/static/启用并配置cacheignoreheaders等参数。

Apache 的 mod_cache_disk 不是开个开关就能用的模块,它需要模块协同、路径合规、响应可控三者齐备才能真正落盘生效。核心不是“全站缓存”,而是精准控制哪些资源进磁盘、怎么进、进得稳。
先确保模块加载正确且顺序无误
mod_cache_disk 是存储后端,必须依赖 mod_cache 提供的缓存框架,且 mod_cache 必须在它之前加载。
- Debian/Ubuntu:运行
a2enmod cache cache_disk,再重启 Apache(systemctl restart apache2) - RHEL/CentOS:检查
/etc/httpd/conf.modules.d/00-base.conf中这两行未被注释:LoadModule cache_module modules/mod_cache.soLoadModule cache_disk_module modules/mod_cache_disk.so - Windows(如 phpEnv):确认
httpd.conf中先加载mod_cache.so,再加载mod_cache_disk.so - 验证是否成功:执行
apache2ctl -M | grep cache或httpd -M | grep cache,应同时输出cache_module和cache_disk_module
CacheRoot 目录必须本地、可写、空间充足
这是缓存能否写入的硬门槛。路径选错或权限不对,日志里只会报 (13) Permission denied 或静默失败。
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
- 目录需由 Apache 进程用户完全可读写,例如:
sudo mkdir -p /var/cache/apache2/mod_cache_disksudo chown www-data:www-data /var/cache/apache2/mod_cache_disk(Debian/Ubuntu) - 剩余空间建议 ≥5GB——该模块不自动清理过期文件,只按策略决定是否写入,磁盘满则缓存直接失效
- 禁止设在
/tmp、NFS、Samba、FUSE 挂载点或杀毒软件高频扫描路径(尤其 Windows) - 典型配置示例:
CacheRoot "/var/cache/apache2/mod_cache_disk"CacheDirLevels 2CacheDirLength 2
只对明确路径启用,并放宽默认拦截条件
默认规则极其保守:带 Set-Cookie、Cache-Control: private、无 Last-Modified 或状态码非 200/301/404,一律不缓存。静态资源常因无关头被跳过。
- 推荐为静态资源统一规划路径前缀,例如
/static/或/assets/,然后只对该路径启用:CacheEnable disk /static/ - 加
CacheIgnoreHeaders Set-Cookie防止因 Cookie 头丢弃缓存(常见于 CMS 或代理注入) - 加
CacheIgnoreNoLastMod On允许缓存无Last-Modified的资源(构建产物如 Webpack 输出的 JS/CSS 往往没有) - 若需缓存动态接口(如 Java 后端),必须配合
mod_proxy,且后端响应头必须含Cache-Control: public, max-age=3600,否则仍被拒绝
配合 expires 和 headers 模块强化缓存策略
仅靠 mod_cache_disk 无法决定“要不要缓存”,最终是否落盘取决于响应头中的 Cache-Control 或 Expires。因此必须联动设置。
- 启用
mod_expires统一为静态资源注入强缓存头:<ifmodule mod_expires.c></ifmodule>ExpiresActive OnExpiresByType text/css "access plus 1 month"ExpiresByType application/javascript "access plus 1 month"ExpiresByType image/jpg "access plus 1 year" - 用
mod_headers覆盖或补全关键头,例如强制移除干扰头:Header unset Set-Cookie(仅限静态资源路径内) - 加
CacheIgnoreCacheControl off表示尊重后端返回的Cache-Control;若后端不可控,才考虑设为on(慎用)










