
Varnish キャッシュ ミラーをファイル サーバーの前に設定しましたが、ファイル サーバーからデータが無限に再ダウンロードされているようです。
合計で約 100 GB のデータがありますが、これまでに Varnish はファイル サーバーから 800 GB をダウンロードしました。
私は 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 が含まれている場合、それらはデフォルトでバックエンドに渡されます。エンコーディングと vary を削除すると、状況が少し標準化され、キャッシュに画像のコピーをいくつか保持する必要がなくなります。また、100G はバッキング ストアには少し大きすぎると思うので、マシンに搭載されている RAM の量に近いものを検討してください。