解决从安装Varnish的web服务器上下载东西时出错和”爆缸”的问题

varnish_crash1

用DigitalOcean下载了一个2个多G的EVE用来测试下DigitalOcean的G口是不是还想以前一样给力. 果然依然能到80MB/S

varnish_crash4

然后把EVE考到了DigitalOcean VPS的www目录用来从WeLoveServers新升级的G口上wget一下测试下DO的上传能力和WLS的下载能力, 结果却一直无法连上

varnish_crash2

等了好久返回出错页面

varnish_crash3

然后打开DigitalOcean上的探针发现, 每次下载请求发起时探针都会显示和"爆缸"一样. 然后换了BudgetVM的Xen依然是这个毛病. 认为可能是LNMPV里面Varnish在作怪. 于是查资料的时候发现下面Varnish的State Diagram. 收藏.

varnish

 

连接不成功和"爆缸"是由于Varnish的Cache的问题. Varnish尝试将这个2G的文件建立Cache导致崩溃. 解决方法如下:

在sub vcl_fetch里添加

if (beresp.http.Content-Length ~ "[0-9]{8,}") { set req.http.x-pipe = "1"; return (restart); } //不对10MB以上的文件进行Cache操作

在sub vcl_recv里添加

if (req.http.x-pipe && req.restarts > 0) {remove req.http.x-pipe;return (pipe);}

分享到:

make a comment

(opt)