使用清漆从远程服务器缓存图片

时间:2016-12-11 18:54:42

标签: varnish haproxy varnish-vcl

我正在创建简单的页面,其中会有很多图片。所有图片都托管在远程提供商(托管在对象存储上,我只有所有图片的链接)为了加快www我想使用清漆来缓存这些图片,但我有问题:
所有图片均以https格式提供,因此我使用haproxy终止ssl,下一次流量转到清漆,但如何在最终用户可见的清漆网站地址中进行映射,例如https://www.website.com/picture.jpg远程地址是图片托管(https://www.remotehostedpictures.com/picture.jpg)。因此,在最终结果中,用户必须看到第一个链接,远程地址remotehostedpictures.com/picture.jpg无法显示。

2 个答案:

答案 0 :(得分:0)

在您的清漆vcl_recv中,您应该更改请求host标题,然后您必须声明remotehostedpictures.com作为您的后端。

最后,你应该有类似的东西(未经过测试的代码)

sub vcl_recv {
  if (req.url ~ "\.jpg") {
    set req.http.host = "www.remotehostedpictures.com";
    set req.backend_hint = remote_host;
  }
}

backend remote_host {
  .host = "www.remotehostedpictures.com";
  .port = "80";
}

顺便提一下,请注意backend.host中的dns。如果dns解析为多个IP,则清漆将使用第一个。 dns解析是在vcl编译时完成的,所以如果dns发生了变化,你应该重新加载你的vcl。

答案 1 :(得分:0)

我认为在Varnish中存储图像并不是上帝的想法,因为比Varnish快速填充整个ram(如果你有很多图像),比Varnish已满时清除整个缓存,想象服务器上发生了什么清除整个缓存并且您的页面上有流量。

前段时间我在Varnish中进行了这样的缓存,并且在几小时后我必须禁用缓存图像因为清除(对我来说最重要的是缓存页面内容)。

在这种情况下,最佳解决方案是CDN。您可以使用Cloudflare等外部服务,或在Nginx上制作简单的CDN(仅提供带有过期标头的静态文件)。

希望有所帮助:)