清漆绕过一个大文件

时间:2014-04-14 16:25:54

标签: apache caching varnish varnish-vcl

我在我的Apache Web服务器上使用默认设置安装了Varnish。 Apache上市到8080端口,Varnish上市到80.

我网站上的可下载文件很少,大小分别为100MB,500MB和1GB

1GB无法正常工作,当您点击它时,它会说服务器关闭不可用的页面或连接。其他两个工作正常,但我不确定这是否是下载它们的正确方法。

如何使varnish绕过这些文件并直接从Web服务器获取?

谢谢。

2 个答案:

答案 0 :(得分:1)

这可以通过检查后端答案中的Content-Length来完成,如果它大于某个大小,则使用某个标记和restart请求交易标记

示例,Content-Length> = 10,000,00的文件应该是管道传输的:

sub vcl_fetch {
..
  if ( beresp.http.Content-Length ~ "[0-9]{8,}" ) {
     set req.http.x-pipe-mark = "1";
     return(restart);
  }
..
}

然后我们返回检查请求接收和解析。 在这里,我们可以检查我们的标记并执行pipe

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

答案 1 :(得分:1)

在清漆4中,vcl_fetch应替换为vcl_backend_response,请参阅https://www.varnish-cache.org/docs/trunk/whats-new/upgrade-4.0.html