Apache需精准配置mod_cache_disk加速静态资源:先启用mod_cache再mod_cache_disk,CacheRoot须本地可写且≥5GB,仅对/static/等路径启用并忽略干扰头,配合expires和headers模块设长过期与Vary。

要让 Apache 用 mod_cache_disk 加速海量静态资源(如 JS、CSS、图片、字体),关键不是“全盘开启”,而是精准控制缓存范围、确保落盘稳定、避免被响应头或路径逻辑绕过。它不自动生效,必须显式配置且各环节严丝合缝。
模块加载顺序和启用必须正确
mod_cache_disk 是存储后端,依赖 mod_cache 提供缓存框架。两者必须同时启用,且 mod_cache 必须在 mod_cache_disk 之前加载。
- Debian/Ubuntu:运行 a2enmod cache cache_disk,再重启 Apache
- 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):检查 modules/ 目录下是否存在 mod_cache_disk.so(Apache 2.4+),并确保 httpd.conf 中先加载 mod_cache.so,再加载它
- 验证是否成功:执行 apache2ctl -M | grep cache 或 httpd -M | grep cache,应同时看到 cache_module 和 cache_disk_module
CacheRoot 路径必须安全、可写、本地化
缓存目录不是随便指定一个路径就行。它直接影响命中率与服务稳定性。
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
- 路径需由 Apache 进程用户(如 www-data 或 apache)完全可读写,例如:
chown www-data:www-data /var/cache/apache2/mod_cache_disk - 剩余空间建议 ≥5GB——mod_cache_disk 不自动清理过期文件,只按策略决定是否写入,磁盘满则缓存失败
- 禁止设在 /tmp、用户临时目录或杀毒软件高频扫描路径(Windows 下尤其注意)
- 严禁使用 NFS、Samba 或 FUSE 挂载点——原子重命名操作会失败,导致缓存损坏或性能断崖式下降
只缓存真正适合的静态路径,并放宽默认限制
默认情况下,只要响应含 Set-Cookie、Cache-Control: private/no-store 或状态码非 200/301/404,就跳过缓存。静态资源通常不带 Cookie,但常被后端或 CMS 注入干扰头。
- 推荐专为静态资源建路径前缀,比如统一放在 /static/ 或 /assets/,然后只对这个路径启用缓存:
CacheEnable disk /static/ - 加 CacheIgnoreHeaders Set-Cookie 防止因无关 Cookie 头丢弃缓存
- 加 CacheIgnoreNoLastMod On 允许缓存无 Last-Modified 的资源(常见于构建产物)
- 避免用 CacheEnable disk /——它对代理转发请求无效,且易受动态内容污染
配合 expires 和 headers 模块提升命中质量
光靠磁盘缓存不够,前端和中间层也需要明确知道“能缓多久”。用 mod_expires 和 mod_headers 补强策略:
- 启用 ExpiresActive On,按 MIME 类型设置长过期时间:
ExpiresByType text/css "access plus 1 year"ExpiresByType image/webp "access plus 1 year" - 对已压缩资源(如 gzip/brotli),加 Header append Vary Accept-Encoding,防止编码混淆导致缓存错乱
- 若静态资源采用版本号或哈希命名(如 main.a1b2c3.js),可放心设 max-age=31536000,彻底规避过期问题

















