Apache 反向缓存代理 - 为什么它不缓存?
-
06-07-2019 - |
题
我正在尝试为广告图形(gif、jpg、swf)服务设置反向缓存代理。代理工作正常并将请求发送到原始服务器,但我似乎无法弄清楚为什么内容没有被缓存。我当前的配置如下。目标是缓存所有与 /ca/ URI 前缀匹配的请求。源服务器使用干净的 URL 提供文件,没有文件扩展名,在源服务器标头上设置了 Cache-control max-age=1 周。
ProxyRequests Off <Proxy *> Order deny,allow Allow from all </Proxy> <IfModule mod_disk_cache.c> CacheEnable disk / CacheRoot "/var/cache/mod_proxy" CacheDirLevels 3 CacheDirLength 5 CacheIgnoreCacheControl On </IfModule> RewriteCond %{REQUEST_URI} ^/ca/* RewriteRule ^/(.*)$ http://origin.webserver.com/$1 [P,L]
目前,我所看到的唯一实际发生的缓存是在代理服务器上访问的本地文件,我正在寻找我缺少的内容来获取从要缓存的源服务器获取的内容。
我想知道这是否与 mod_cache 不缓存有关,因为内容是从原始服务器获取的,而不是磁盘上的位置。寻找一种方法来强制缓存与该前缀匹配的所有请求。
谢谢!
附注- 看起来我遇到了这个问题: http://mail-archives.apache.org/mod_mbox/httpd-users/200901.mbox/%3C497F6ED3.7080606@gmail.com%3E. 。将检查我的权限并检查调试消息...
解决方案
添加这些指令似乎使缓存机制启动。我认为这与从源服务器发送的过期和缓存控制标头有关,因为我使用 Symfony/PHP5 提供图像,而不是直接从文件系统提供图像。
<IfModule mod_disk_cache.c> CacheEnable disk / CacheRoot "/var/cache/mod_proxy" CacheDirLevels 3 CacheDirLength 5 CacheIgnoreCacheControl On CacheMaxFileSize 100000000 CacheIgnoreNoLastMod On CacheMaxExpire 1209600 CacheIgnoreQueryString On </IfModule>
不隶属于 StackOverflow