apache中mod_proxy不提供缓存,需配合mod_cache(如mod_disk_cache)实现代理级静态资源缓存,结合proxypassmatch路径分流、cache-control响应头及cdn形成三级缓存体系。

在 Apache 架构中,mod_proxy 本身不提供缓存功能,它只负责反向代理与请求转发;真正实现分布式缓存优化,需要 mod_proxy 配合 mod_cache(尤其是 mod_cache_disk)完成静态资源的代理级缓存,并结合路径分流、CDN 协同和后端角色分离。这不是“用 mod_proxy 缓存”,而是以 mod_proxy 为调度入口,由 mod_cache 承担缓存落地。
明确 mod_proxy 的定位:做静态请求的智能分发器
mod_proxy 在这里核心作用是识别并拦截静态资源请求,将其导向专用缓存节点或后端静态服务,避免流经动态应用集群:
- 用
ProxyPassMatch精准匹配扩展名,如:ProxyPassMatch ^/(.*\.(jpg|png|css|js|woff2|svg))$ http://cache-node/$1 - 或按路径隔离:
ProxyPass /static/ http://static-servers/static/ProxyPass /uploads/ http://upload-servers/uploads/ - 务必设置
ProxyPreserveHost Off,防止 Host 头干扰后端虚拟主机判断
启用 mod_cache_disk 实现磁盘级代理缓存
当静态资源由 Apache 自身代理并缓存(而非直连 CDN 或专用静态服务器),需启用并配置磁盘缓存模块:
安装并运行 Aperture(Lightning Labs 的 L402 闪电反向代理),用于创建 L402 付费墙、配置付费 API 端点、为其他代理托管付费内容或测试 L402 认证流程。
- 加载必要模块:
LoadModule cache_module modules/mod_cache.soLoadModule cache_disk_module modules/mod_cache_disk.so - 定义缓存根目录与策略:
<ifmodule mod_cache_disk.c><br> CacheRoot "/var/cache/apache2/mod_cache_disk"<br> CacheEnable disk /static/<br> CacheEnable disk /uploads/<br> CacheIgnoreHeaders Set-Cookie<br> CacheIgnoreNoLastMod On<br></ifmodule>
- 缓存路径需与 ProxyPass 转发路径一致,确保命中有效
配合缓存头策略,让客户端与中间层协同生效
仅服务端缓存不够,必须通过响应头驱动浏览器、CDN 和代理多级复用:
- 对带哈希指纹的资源(如
app.8f3a2d.js)设强缓存:Header set Cache-Control "public, max-age=31536000, immutable" - 对无版本控制的上传类资源(如
/uploads/report.pdf)设协商缓存:Header set Cache-Control "public, max-age=86400"
并确保后端返回ETag或Last-Modified - 统一启用
mod_expires作为兜底:ExpiresByType image/png "access plus 1 year"ExpiresByType text/css "access plus 1 month"
与 CDN 和对象存储形成三级缓存体系
真正的分布式缓存优化不是单点 Apache 缓存,而是分层协作:
- 第一层:浏览器缓存(靠 Cache-Control/Expires 控制)
- 第二层:CDN 边缘节点缓存(CDN 自动读取 Apache 返回的 Cache-Control,需设
public权限) - 第三层:Apache 反向代理缓存(仅在 CDN 未命中且静态资源未托管至 OSS/S3 时启用)
- 建议将长期不变资源(CSS/JS/字体/图标)直接托管到对象存储 + CDN,Apache 仅代理上传目录等低频更新内容










