我们的网站有许多大型 PDF 和 MP3 文件,我们希望将其作为静态文件缓存在 Varnish 中。目前我们无需做太多特别的事情 - 只需删除 和 中的vcl_recv
cookieset resetp.ttl = 100w;
即可vcl_fetch
。
问题似乎是当请求其中一个文件(可能是由较旧的浏览器)并且该文件尚未在 Varnish 缓存中时。Varnish 从后端下载文件时会有延迟。我的理解是,它直到数据完全加载后才开始向客户端传送。这可能需要 20 秒左右,有时 Adobe Acrobat 或 MP3 插件会混淆。
有没有办法pass
在下载时直接同时下载两个内容和将其保存在缓存中以供下次匹配的客户端请求?
答案1
阅读建议:https://www.varnish-software.com/blog/http-streaming-varnish
使用 vanilla Varnish 3.0,你可以设置beresp.do_stream在 vcl_fetch 中设置为 true。文件将在从后端获取时进行流式传输。注意事项:流式传输时对象设置为繁忙,因此其他客户端将被搁置。
另外还有一个 Varnish 3.0.2 版本,其中提供了“完整”的流支持:http://repo.varnish-cache.org/test/3.0.2+streaming/人们在生产中正在使用它,所以也许你想尝试一下。
或者您可以“预热”您的文件,在用户开始下载之前将它们放在 Varnish 内存缓存中?
答案2
3.0.2+streaming 分支不再是最新的,并且仅支持 Varnish Plus 订阅者,没有社区支持。
因此,如果您需要流媒体功能,您可以:
- 尝试清漆加(仅对订阅者可用)已内置对其的支持。
- 测试一下即将推出的 Varnish Cache 4.0(预计于 2014 年第二季度发布)是否能为您解决这个问题(应该可以)。
答案3
Varnish 5.1.2 使用默认配置就可以完成您想要的操作。
我尝试使用服务器发送的事件,其中我需要流式传输第一个请求并缓存第二个请求。它确实有效。