
Я установил зеркало кэша Varnish перед файловым сервером, но, похоже, оно бесконечно перезагружает данные с моего файлового сервера.
Общий объем данных составляет около 100 ГБ, но на данный момент Varnish скачал с моего файлового сервера 800 ГБ.
Я использую файл VCL по умолчанию, который поставляется с Varnish, и заголовки ответов для файлов, обслуживаемых файловым сервером, похожи на следующие:
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, они будут переданы на бэкэнд по умолчанию. Удаление кодировки и изменения немного нормализует ситуацию, так что вам не придется хранить несколько копий ваших изображений в кэше. Кроме того, я думаю, что 100 ГБ может быть немного избыточным для вашего резервного хранилища, вы можете рассмотреть что-то более близкое к объему оперативной памяти, который есть на вашем компьютере.