Apache反向代理需显式启用mod_cache及配套模块并配置CacheRoot、CacheEnable等参数,结合mod_expires设置Expires和Cache-Control头,忽略Set-Cookie等干扰头,排除敏感路径,才能有效缓存后端响应。

Apache 反向代理本身不会自动缓存后端响应,必须显式启用 mod_cache 及配套模块,并结合响应头控制策略,才能有效减少源站压力。核心是让重复请求命中缓存,而非每次都打到后端。
启用缓存模块并设置基础磁盘缓存路径
确保以下模块已加载(在 httpd.conf 或站点配置中):
mod_cache.so-
mod_cache_disk.so(推荐用于持久化缓存) -
mod_proxy.so和mod_proxy_http.so
添加缓存根目录与默认策略:
<IfModule mod_cache.c> CacheRoot "/var/cache/apache2/mod_cache_disk" CacheEnable disk / CacheDirLevels 2 CacheDirLength 1 CacheDefaultExpire 300 CacheMaxExpire 86400 </IfModule>
CacheDefaultExpire 300 表示无明确缓存指令时,默认缓存 5 分钟;CacheMaxExpire 是硬上限,防止缓存过久失真。
用 mod_expires 精确设置响应头
仅靠 CacheDefaultExpire 不够可靠。建议启用 mod_expires,统一注入 Expires 和 Cache-Control:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
- 加载模块:
LoadModule expires_module modules/mod_expires.so - 在虚拟主机或代理配置段内启用:
<IfModule mod_expires.c> ExpiresActive On ExpiresByType text/css "access plus 1 month" ExpiresByType application/javascript "access plus 1 month" ExpiresByType image/png "access plus 1 year" ExpiresDefault "access plus 10 minutes" </IfModule>
这些头会随响应返回给客户端,也会影响 Apache 自身的缓存决策——尤其当后端未返回 Cache-Control 时,Apache 会参考 Expires 值。
适配动态内容:忽略干扰头并放宽缓存条件
后端常带 Set-Cookie 或缺失 Last-Modified,导致 Apache 默认跳过缓存。需主动干预:
- 加
CacheIgnoreHeaders Set-Cookie:避免因 Cookie 阻止缓存(适用于不依赖用户态的公共页面) - 加
CacheIgnoreNoLastMod On:允许缓存没有Last-Modified或ETag的响应 - 若后端返回
Cache-Control: public, max-age=600,Apache 会优先按此值缓存;未返回时才 fallback 到ExpiresDefault
注意:对含用户私有数据的接口(如 /user/profile),应通过 CacheDisable 显式排除,防止缓存污染。
验证缓存是否生效
启用后,检查响应头是否含 X-Cache: HIT 或 X-Cache: MISS(需在配置中加 Header set X-Cache "MISS" 和 CacheIgnoreHeaders X-Cache 配合实现)。也可直接查看 CacheRoot 目录下是否有新增文件,确认磁盘写入成功。

















