我想配置带有缓存的 apache 正向代理。我有一些客户端需要不时从互联网上下载一些大文件,我希望通过这个 apache 代理来完成,这样它就可以将这些大文件缓存在磁盘上并从缓存中返回它们。
我已经成功配置了代理,但缓存不起作用。我有缓存,内存缓存,文件缓存模块已启用。我的缓存代理虚拟主机的配置如下:
<VirtualHost *:80>
ProxyRequests On
ProxyVia On
<Proxy *>
Order deny,allow
Deny from all
Allow from all
</Proxy>
CacheEnable disk /
CacheMaxFileSize 10000000000
CacheMinFileSize 1000000
CacheRoot "/var/cache/apache2/mod_disk_cache/"
CacheMaxExpire 24
CacheLastModifiedFactor 0.1
CacheIgnoreQueryString On
EnableSendfile On
CacheDefaultExpire 7200
CacheIgnoreNoLastMod On
CacheStorePrivate On
CacheStoreNoStore On
ServerName my-proxy
ErrorLog "/var/log/apache2/proxy-error.log"
CustomLog "/var/log/apache2/proxy-access.log" common
</VirtualHost>
为了测试目的,我将 Firefox 配置为使用此代理。我从以下网址下载了一个 zip 文件 http://download.java.net/jdk8/archive/b128/binaries/jdk-8-fcs-bin-b128-linux-i586-01_feb_2014.tar.gz,大约需要 5 分钟。我听到的唯一一句台词代理访问日志本次活动的主题是:
"GET http://download.java.net/jdk8/archive/b128/binaries/jdk-8-fcs-bin-b128-linux-i586-01_feb_2014.tar.gz HTTP/1.1" 200 115883719
当我后来检查/var/缓存/apache2/mod_disk_cache文件夹,那里什么都没有。下次我下载同一个文件时,也需要同样的 5 分钟,尽管在我们的本地网络中速度要快得多 - 这意味着它再次从互联网上重新下载。
我怎样才能使其缓存?
我见过将 Apache 设置为具有缓存的正向代理提问,阅读什么可以缓存?- 请求或响应中没有“授权”标头(使用 wireshark 检查)。所以在我看来它应该被缓存。它也不应该受到这个错误,因为 apache 版本是2.2.22-1ubuntu1和不是2.4.3.
答案1
最初没有正确记录,但 CacheEnable 不再隐式适用于正向代理。现在有一个说明和更新的示例。
http://httpd.apache.org/docs/2.4/mod/mod_cache.html#cacheenable
编辑以不隐藏链接中的答案:如CacheEnable disk http://
答案2
我必须专门执行CacheQuickHandler off
,因为ProxyPass
里面有Location
。只有当它正确无误后,缓存才会启动。示例:
CacheQuickHandler off
CacheRoot /var/cache/apache2
<Location "/wp-content/uploads/_papaya">
CacheEnable disk
ProxyPass "https://remote.papaya/wp-content/uploads"
</LocationMatch>