我正在创建简单的页面,其中将有很多图片。所有图片都托管在远程提供商上(托管在对象存储上,我只有到所有图片的链接)以加快www速度我想使用varnish来缓存此图片,但我有问题:
所有的图片都是用https服务的,所以我已经使用haproxy来终止ssl和下一个流量去varnish,但是如何映射到varnish网站地址,应该是终端用户可见的,比如带有远程地址的https://www.website.com/picture.jpg,哪里是图片托管(https://www.remotehostedpictures.com/picture.jpg)。因此,在最终结果中,用户必须看到第一个链接,远程地址remotehostedpictures.com/picture.jpg是不可见的。
发布于 2016-12-12 21:09:41
在你的varnish 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解析为多个If,则varnish将使用第一个If。dns解析是在vcl编译时完成的,所以如果dns发生变化,您应该重新加载您的vcl。
发布于 2016-12-21 06:34:15
我认为用Varnish存储图片不是个好主意,因为Varnish会很快填满整个ram (如果你有很多图片),而不是当Varnish满的时候它会清除整个缓存,想象一下当整个缓存被清除并且你的页面上有流量时,服务器上会发生什么。
不久前,我在Varnish中做了这样的缓存,几个小时后,由于清除,我不得不禁用缓存图像(对我来说,最重要的是缓存页面内容)。
在这种情况下,最好的解决方案是CDN。您可以使用Cloudflare等外部服务,也可以在Nginx上做简单的CDN (只服务有Expire头的静态文件)。
希望它能有所帮助:)
https://stackoverflow.com/questions/41089847
复制相似问题