Apache正向代理配合缓存加速的核心是让局域网客户端通过代理访问外网时,重复请求从本地磁盘读取响应,减少外网往返、降低延迟;需启用mod_proxy、mod_proxy_http、mod_proxy_connect、mod_cache、mod_cache_disk等模块,严格限制客户端IP范围,并配置CacheRoot、CacheEnable及Expires策略。

Apache 正向代理配合缓存加速,核心是让局域网内客户端通过代理访问外部网站时,重复请求能直接从本地磁盘读取响应,减少外网往返、降低延迟。它不改变网页内容,也不隐藏客户端意图,但对软件源、文档站、内部知识库等静态或低频更新页面效果明显。
启用必要模块并开启正向代理
先确认以下模块已加载(Debian/Ubuntu 通常用 a2enmod,CentOS/RHEL 编辑 httpd.conf):
-
mod_proxy.so(必需) -
mod_proxy_http.so(支持 HTTP 目标) -
mod_proxy_connect.so(支持 HTTPS,即 CONNECT 方法) -
mod_cache.so和mod_cache_disk.so(磁盘缓存基础) -
mod_expires.so(可选,便于补充缓存头)
在全局配置中加入:
ProxyRequests On ProxyVia On
注意:不要混用 ProxyPass 等反向代理指令,否则可能冲突。
严格限制客户端访问范围
正向代理一旦开放给公网或未授权网段,极易沦为开放代理,被用于垃圾邮件、攻击跳板。务必用 <Proxy> 块限定来源:
<Proxy *>
Require ip 192.168.10.0/24
Require ip 10.0.5.0/24
</Proxy>
Apache 2.4 推荐使用 Require 语法;旧版可用 Order/Deny/Allow。同时建议保留 ProxyVia On,便于日志追踪请求路径。
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
配置磁盘缓存路径与基础策略
缓存只对 GET/HEAD 请求生效,且目标服务器返回的响应必须满足“可缓存”条件(如状态码 200 + 含 Cache-Control 或 Expires 头)。配置示例:
CacheRoot "/var/cache/apache2/proxy" CacheEnable disk / CacheDirLevels 2 CacheDirLength 1 CacheIgnoreNoLastMod On CacheIgnoreQueryString Off
说明:
-
CacheRoot目录需存在,且 Apache 进程(如www-data或apache)有读写权限:sudo chown -R www-data:www-data /var/cache/apache2/proxy -
CacheIgnoreQueryString Off表示区分/page.html?v=1和/page.html?v=2;若确认参数不影响内容(如埋点 ID),可设为On提高复用率 -
CacheIgnoreNoLastMod On允许缓存无Last-Modified头但有Expires或Cache-Control的响应
补充缓存控制头提升命中率
很多外部网站响应头缺失或缓存时间过短(如仅 60 秒)。可在 Apache 层主动补充合理有效期:
<IfModule mod_expires.c>
ExpiresActive On
ExpiresByType text/html "access plus 15 minutes"
ExpiresByType application/javascript "access plus 1 hour"
ExpiresByType image/jpeg "access plus 1 day"
ExpiresByType image/png "access plus 1 day"
</IfModule>
搭配 CacheIgnoreHeaders Set-Cookie(放在 <IfModule mod_cache_disk.c> 内),避免因 Cookie 头导致缓存被跳过。注意:该操作不适用于含用户私有数据的页面(如登录后仪表盘)。
配置完成后重启 Apache,检查日志中是否有 cache: stored 或 cache: served 记录,即可验证缓存是否生效。整个过程不复杂但容易忽略权限和访问控制,实际部署前建议在测试网段先行验证。

















