apache mod_proxy 本身不提供缓存功能,真正实现磁盘缓存的是 mod_cache_disk,其缓存根目录(cacheroot)需手动创建并赋予 apache 进程可写权限;必须协同启用 mod_proxy、mod_cache、mod_cache_disk 和 mod_headers 模块,并在 proxypass 前端路径上用 cacheenable disk 显式绑定,路径不匹配则缓存失效。

Apache 本身不自带 proxy 缓存目录,mod_proxy 不提供缓存功能,真正负责缓存的是 mod_cache_disk。所谓“proxy 缓存目录”,其实是 mod_cache_disk 的磁盘缓存根目录(CacheRoot),需手动创建并赋予 Apache 进程可写权限。
确认并启用缓存模块
确保以下模块已加载(Ubuntu/Debian 可用 a2enmod,RHEL/CentOS 检查 httpd.conf 中的 LoadModule 行):
-
mod_proxy和mod_proxy_http(代理转发) -
mod_cache(缓存控制中枢) -
mod_cache_disk(磁盘缓存落地) -
mod_headers(用于补全缓存响应头,推荐启用)
自定义缓存目录路径
选择一个独立、有足够空间且便于维护的路径,例如 /var/cache/apache2/proxy-cache:
PHP中文网提供Apache 2.4.62 官方 tar.gz 源码包下载,通过源码编译安装,开发者能够灵活定制模块、优化性能并精准控制安装路径,满足多样化的业务需求。
- 创建目录:
sudo mkdir -p /var/cache/apache2/proxy-cache - 设置属主和权限(以 Debian/Ubuntu 的
www-data或 RHEL/CentOS 的apache用户为准):sudo chown www-data:www-data /var/cache/apache2/proxy-cachesudo chmod 750 /var/cache/apache2/proxy-cache - 确保父目录(如
/var/cache/apache2)也具备执行权限,否则子目录无法访问
在配置中声明缓存根与启用路径
在 VirtualHost 或全局配置中添加:
- 指定缓存根:
CacheRoot "/var/cache/apache2/proxy-cache" - 设置缓存大小上限(可选但推荐):
CacheDirLevels 2、CacheDirLength 1 - 启用缓存 —— 注意:路径必须与
ProxyPass的前端路径一致:ProxyPass /static/ http://backend/static/CacheEnable disk /static/
不要写 CacheEnable disk /,它对代理转发的响应无效;也不要用后端真实路径(如 /api/),而要用用户请求的 URL 路径(如 /v1/)。
验证目录是否生效
重启 Apache 后,发起一次缓存型请求(如访问带 Cache-Control: public, max-age=3600 响应头的静态资源),然后检查:
- 目录下是否生成子目录结构(如
/var/cache/apache2/proxy-cache/00/) - 日志中是否有
cache hit或cache miss记录(开启CacheLock on并配合LogLevel cache:trace4可调试) - 响应头是否含
X-Cache: HIT(需配合Header always set X-Cache "%{cache-status}e"等自定义头)










