阿里云的OSS作为存储方案,可以帮助服务端减轻存储压力。但是,对于部分server来讲,它们可能仅仅希望将图片、视频等容量稍大的文件托管在OSS,这就产生了一个矛盾,即如何部署图片。
假设某网站的域名为www.a.com,那么我们来看看如何部署网站的OSS图片存储方案。
首先,CDN访问OSS资源。
在OSS中新增一个自定义域名static.a.com,搭配CDN作为请求OSS资源的访问域名。
这样,当我们在请求OSS资源时,全部使用static.a.com作为OSS资源的访问域名。搭配CDN,OSS的费用会降低很多。
其次,回源镜像设置。
在此之前,要了解回源的概念。说的简单点,就是当访问的OSS资源不存在,则直接跳过对OSS的请求,直接去访问网站本身存在的文件。例如网站上使用了一张图片static.a.com/images/a.jpg,按道理,应该在OSS的bucket中也存在/images/a.jpg,这样访问static.a.com/images/a.jpg时,才能正常看到这张图片。但是,可惜的是,管理员把图片上传到了www.a.com/images/a.jpg,也就是上传到了网站服务器上面去,而OSS中没有这张图片。而这个时候,回源的效果就是,访问static.a.com/images/a.jpg时,发现OSS中没有这张图片,CDN立即去找www.a.com/images/a.jpg,如果有,则返回这张图片。
那镜像又是怎么回事呢?就是做一个备份。上面这个情况中,OSS中没有这张图片,而网站服务器上有这张图片,通过访问static.a.com/images/a.jpg时,正常显示了图片,这个时候通过镜像功能,直接把这张图片镜像到OSS中的/images/a.jpg,下一次再访问static.a.com/images/a.jpg时,OSS中就有这张图片了。
具体怎么设置呢?在OSS的属性设置中进行规则添加就可以了。
添加规则时,会问你是否需要镜像,如果不镜像,就不会自动备份一个到OSS中,下次访问的时候,虽然还会回源,正常显示图片,但是实际上感觉不是很好。
这里有两个前缀的选项,比较好玩儿。第一个前缀实际上是一个判断条件,比如你访问static.a.com/images/xxx就遵循这条规则,如果你访问static.a.com/videos/xxx则不遵循这条规则,就不会回源了。第二个前缀实际上是一个url重写的条件,比如你访问static.a.com/images/a.jpg,但是你的服务器上,实际上要通过www.a.com/uploads/images/a.jpg才能访问到这张图片,这个时候,就可以把uploads当做前缀。
回源镜像的好处。
你有没有想过这种场景:你有正式服务器和测试服务器。当你在正式服务器上访问网站的时候,一切OK,不会产生任何影响。但是,有一天,你在测试服务器上处理数据,并把所有的必备图片都上传好了,现在,你想要是可以直接把测试服务器上的图片切换到正式服务器就好了,这样你只需要转移开发好的源代码即可,所有的工作只需要在很短的时间就完成了。
这个时候,你如果使用回源镜像,就好办了,无论是在正式环境,还是测试环境,都使用static.a.com作为图片的访问域名。而在回源规则那个地方,做好规则配置,测试环境中的图片会被镜像到OSS中,也就是说,OSS上有正式环境和测试环境的所有图片。现在只需要搬迁你的源码即可。
图片功能。
OSS的图片功能帮我们解决了一张图片需要多个尺寸的需求。比如你现在上传了一张1920x512的图片,但是,你现在想把这张图片裁剪为一张1200x512的图片,如果按照原来的方案,需要在上传图片的时候,在服务器上对图片进行裁剪,同时保存原始尺寸的图片和这张裁剪好的新图片。而如果后期需求突然改变,不需要1200宽的图片了,全部改为1600宽的图片,这下就艹尼玛了,服务器上没有这个尺寸的图片,所有的图片需要手工编写代码来全部处理一遍,既浪费开发时间,又浪费服务器资源。
而OSS图片功能,可以在访问路径末尾添加一个标记,用来自动裁剪出新尺寸的图片。比如访问img.a.com/images/a.jpg@!1600x512,就可以访问新尺寸的图片了。注意,这里的@!1600x512可不是固定的格式,也不代表真实要裁剪的尺寸,而是根据你设置的裁剪长宽来裁剪。
你得先分配一个域名来实现该功能,比如img.a.com。
它不能和OSS使用同一个域名,因为OSS的图片处理功能需要用OSS的另外一个服务来实现,而这个服务本身的域名和OSS的CDN域名是不同的。
接下里就是添加一个裁剪规则。
规则名称就是我们上面那个@!后面的字符串,我上面用的是1600x512,实际上你可以使用任意字符串。
添加好规则后,在用新绑定的域名去访问OSS中的资源,跟上一个后缀(规则名称),就能得到对应尺寸的裁剪好的图片了。
好了,这篇文章要讲的内容就这些了,是不是又get到一点小技能呢?
2016-04-10 9048