Linux中Apache代理缓存需启用mod_proxy、mod_cache、mod_cache_disk等模块,配置CacheRoot路径与忽略Set-Cookie等头,并通过X-Cache响应头验证命中状态,适配后端不规范缓存头。

在 Linux 中用 Apache 配置代理缓存加速后端响应,核心是启用 mod_proxy + mod_cache_disk(或 mod_mem_cache),并确保响应头合规、路径权限正确、缓存策略明确。它不是“开个开关就生效”,而是需要逐层验证和适配。
确认并启用必要模块
Apache 缓存功能依赖多个模块协同工作,缺一不可:
-
mod_proxy和mod_proxy_http:支撑反向代理能力 -
mod_cache:提供缓存框架(必须在mod_cache_disk之前加载) -
mod_cache_disk:实现磁盘持久化缓存(推荐用于 API/页面级缓存) -
mod_headers:用于注入X-Cache等标识,方便验证命中状态
Debian/Ubuntu 执行:
sudo a2enmod proxy proxy_http cache cache_disk headers<br>sudo systemctl restart apache2
RHEL/CentOS 检查 /etc/httpd/conf.modules.d/00-base.conf 中这五项是否已启用且未被注释。
配置磁盘缓存路径与基础规则
在 <VirtualHost> 或全局配置中添加:
<IfModule mod_cache.c><br> <IfModule mod_cache_disk.c><br> CacheRoot /var/cache/apache2/mod_cache_disk<br> CacheEnable disk /<br> CacheDirLevels 2<br> CacheDirLength 1<br> CacheIgnoreHeaders Set-Cookie Vary<br> CacheIgnoreCacheControl off<br> CacheDefaultExpire 600<br> CacheMaxExpire 86400<br> </IfModule><br></IfModule>
关键点说明:
-
CacheRoot目录需存在且由www-data(或apache)用户可读写:sudo chown www-data:www-data /var/cache/apache2/mod_cache_disk -
CacheIgnoreHeaders Set-Cookie是第三方 API 缓存的关键——多数后端返回该头,默认会跳过缓存 -
CacheIgnoreCacheControl off表示不忽略后端的Cache-Control,但若后端不规范,可设为on并配合CacheDefaultExpire强制兜底
让缓存行为可观察、可验证
加响应头是最直接的验证方式:
Header always set X-Cache "%{cache-status}e" env=cache-status<br>Header always set X-Cache-Hit "1" env=cache-hit<br>Header always set X-Cache-Miss "1" env=cache-miss访问一次接口后,用 curl -I http://your-domain/api/xxx 查看响应头:
- 首次返回:
X-Cache: MISS - 再次请求(未过期):
X-Cache: HIT - 若始终是
MISS,检查 error.log 是否有类似not cacheable (no store)的提示,大概率是响应头含Cache-Control: no-store或状态码不在默认白名单(200/301/404等)
适配常见后端不规范场景
很多 API 不返回标准缓存头,或返回 Vary: *、private 等禁用字段。此时可在代理段内补救:
<Location "/api/"><br> ProxyPass http://backend:8080/api/<br> ProxyPassReverse http://backend:8080/api/<br> # 强制覆盖响应头,使其可缓存<br> Header always set Cache-Control "public, max-age=300"<br> Header always unset Vary<br></Location>
注意:Header always set 会覆盖后端原始头,适用于你完全信任该接口内容稳定性的场景;如涉及用户身份、敏感数据,务必评估风险。
不复杂但容易忽略


















