Varnish 贪婪缓冲

Varnish 贪婪缓冲

我在 Debian Linux 上安装了 nginx 代理(ssl)到 varnish(5.2)到 apache。

varnish 将响应不缓冲地传递给 nginx(也不缓冲)

sub vcl_backend_response {
  if ( std.integer(beresp.http.Content-Length, 0) > 10000 ) {
    set beresp.do_stream = true;
  }
}

如果下载一个大文件(例如:8G),下载会立即开始(因此流似乎可以工作)但 Varnish RAM 的使用量会不断增长。

似乎 varnish 尽可能快地从 apache 中拉取(比输出到外部世界更快)并窃取所需的所有内存。

如果我让 nginx 直接代理到 apache,就不会遇到这个问题。

在这种情况下,有没有办法告诉 varnish 限制它的缓冲?

我是否遗漏了什么?

更新

$ curl -i https://example.com/test.dmg | head

HTTP/1.1 200 OK
Server: nginx
Date: Sat, 05 Jan 2019 21:26:43 GMT
Content-Type: application/x-apple-diskimage
Content-Length: 8743924593
Connection: keep-alive
Last-Modified: Wed, 28 May 2014 16:18:56 GMT
Accept-Ranges: bytes
Age: 0
X-Cache: MISS
Strict-Transport-Security: max-age=15768000; includeSubDomains; preload
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block

答案1

尽管你的 VCL 和看似正常工作的流,但你的后端很可能不是发送Content-Length标头。

你可能想确保它确实如此。检查这里

相关内容