我已经在文件服务器前面设置了一个 Varnish 缓存镜像,但它似乎在无休止地从我的文件服务器重新下载数据。
总共有大约 100GB 的数据,但到目前为止 Varnish 已经从我的文件服务器下载了 800GB。
我使用 Varnish 自带的默认 VCL 文件,文件服务器提供的文件的响应头类似于以下内容:
HTTP/1.1 200 OK
Cache-Control: max-age=290304000, public
Content-Type: image/jpeg
Expires: Wed, 29 Dec 2010 21:38:33 GMT
Server: Microsoft-IIS/7.0
E-Tag: "8b4723296ab697530768f18b1378b269"
Content-Disposition: inline; filename=image046.jpg;
X-AspNet-Version: 4.0.30319
X-Powered-By: ASP.NET
Date: Thu, 23 Dec 2010 05:38:33 GMT
Content-Length: 100592
我使用以下选项启动 varnishd:
varnish/sbin/varnishd -a 0.0.0.0:80 -f varnish/etc/varnish/default.vcl -s file,varnish/var/lib/varnish/varnish_storage.bin,100G
答案1
sub vcl_recv {
if (req.url ~ "\.(cur|gif|jpg|jpeg|swf|css|js|flv|mp3|mp4|pdf|ico|png)(\?.*|)$") {
unset req.http.cookie;
unset req.http.Accept-Encoding;
unset req.http.Vary;
}
}
如果您的请求包含 cookie,则默认情况下它们将传递到后端。删除编码和变化将使事情更加规范化,这样您就不需要在缓存中保留一些图像副本。另外,我认为 100G 可能对您的后备存储来说有点太多了,您可以考虑更接近您机器中的 RAM 量。