apache通过分层缓存机制实现高效带宽节省:浏览器端强缓存拦截重复请求,代理级缓存复用后端响应,配合精准排除、安全兜底与协同验证,确保合适内容在合适环节缓存合适时间。
apache 通过在服务器端和客户端之间建立分层缓存机制,直接减少对源服务器(如后端应用、数据库或上游服务)的重复请求,从而显著降低带宽消耗。核心不是“多缓存”,而是“让合适的内容,在合适的环节,缓存合适的时间”。
浏览器端强缓存:拦截重复请求于源头
对 JS、CSS、图片等不常变更的静态资源,配置 Expires 和 Cache-Control 响应头,使浏览器本地长期存储,完全不发请求到 Apache(更不会触达源服务器)。
- 启用
mod_expires模块,在虚拟主机或目录中添加:
ExpiresActive On
ExpiresByType text/css "access plus 1 year"
ExpiresByType application/javascript "access plus 1 year"
ExpiresByType image/png "access plus 1 month"
- 配合
mod_headers设置更精细的指令,例如带哈希文件名的资源可加immutable:
Header set Cache-Control "public, max-age=31536000, immutable"
- 效果:一个 100KB 的 JS 文件被用户访问 100 次,仅首次消耗带宽;后续 99 次由浏览器本地加载,源服务器零压力。
Apache 代理级缓存:复用已生成响应
当 Apache 作为反向代理(如对接 Tomcat、PHP-FPM 或 Node.js),可启用 mod_cache_disk 将后端返回的完整 HTML 或 API 响应缓存到磁盘。相同请求直接由 Apache 返回,不再转发给源服务器。
- 启用模块并设置缓存路径(需确保权限):
LoadModule cache_module modules/mod_cache.so
LoadModule cache_disk_module modules/mod_cache_disk.so
CacheEnable disk /
CacheRoot "/var/cache/apache2/proxy_cache"
CacheDirLevels 2
CacheDirLength 1
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
- 对非敏感、更新频率可控的动态页面(如文章页、产品列表),在后端响应中返回
Cache-Control: public, max-age=3600;Apache 自动缓存该响应 1 小时。 - 排除不能缓存的路径,例如登录页、用户中心:
CacheDisable on
精准排除与安全兜底:避免缓存误伤
错误缓存会放大带宽浪费(如缓存了含 Set-Cookie 的响应再错发给其他用户),甚至引发安全问题。必须主动排除高风险内容:
- 禁用对含用户状态接口的缓存:
Header set Cache-Control "no-store, no-cache"(如/api/login、/account/profile) - 忽略干扰性响应头(如
X-Request-ID、X-Timestamp),防止 Apache 因它们误判为“不同响应”而拒绝复用缓存:
CacheIgnoreHeaders X-Request-ID X-Timestamp
- 对未返回
Last-Modified的动态响应,启用CacheIgnoreNoLastMod On,避免跳过缓存机会。
验证与协同:确保策略真实生效
配置完成不等于生效。需结合工具确认缓存行为是否符合预期:
- 用浏览器开发者工具 → Network 标签页,查看资源响应头中的
Cache-Control、Expires、X-Cache(若启用 proxy cache) - 用
curl -I https://yoursite.com/app.js检查头部输出 - 对代理缓存,检查
/var/cache/apache2/proxy_cache/目录下是否有生成文件,并观察命中率(X-Cache: HIT) - 后端应用应主动输出合理缓存头,Apache 不替代业务逻辑判断;前端资源建议采用哈希文件名(如
main.a1b2c3.js),确保更新后自动失效旧缓存。










