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