七牛镜像的使用
前段时间,team使用了七牛镜像的功能,用到了,就决定了解一下。
七牛官网的说明如下:
设置镜像存储,源站资源(文件/图片等)根据初次访问自动同步到七牛云存储,数据平滑迁移。可使用绑定的自定义域名访问镜像存储的源站资源。
配置镜像存储后,因为镜像源和镜像空间内容基本一致,将可能导致搜索引擎对源站进行封锁,可配置搜索引擎的 robots.txt 文件避免此情况发生。
配置方式如下:
登陆七牛,选中一个存储对象,点击存储镜像,输入镜像源,也就是你网站的地址,点击保存设置即可。页面如下:
假设我们输入的镜像源是 http://www.cnblogs.com/CraryPrimitiveMan ,你的七牛存储对象的地址是 xxx.qiniu.com ,然后你可以访问 xxx.qiniu.com/830384/o_qiniu-page.png ,其实他最终访问的是 http://images.cnblogs.com/cnblogs_com/CraryPrimitiveMan/830384/o_qiniu-page.png ,也就是上面的那张图片。而且你会在你的存储对象中看到相应的图片。
同样如果我们的地址是一个 action,action 的作用是输出一个图片,这样的话是同样可行的。在 action 中可以使用如下 php 代码:
$filename = 'https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket=gQF48ToAAAAAAAAAASxodHRwOi8vd2VpeGluLnFxLmNvbS9xL0xrUEhlbDdtUjRRXy01YUJqRzFLAAIEh7MhVwMEECcAAA==';
$src = imagecreatefromjpeg($filename);
header('Content-Type: image/jpeg');
imagejpeg($src, null, 100);
imagedestroy($src);
上面的例子只是简单的读取图片数据并输出,但在真正的项目中你可能会遇到很多图片的操作,比如两张图片合并,在图片上写入文字等等。
关于这方面的内容,你可以查看相关的php文档 GD 和图像处理函数
需要注意以下几点:
-
如果源站的 URL 是类似这样的:http://example.com/a/b/c/d.txt?version=20130807 ,那么镜像存储会将文件 d.txt 抓取过来,并在七牛保存为a/b/c/d.txt (在七牛云存储中称为 key),忽略问号后面的参数。如果源站的 URL 是类似这样的:http://example.com/?version=20130807 ,那么镜像存储会将访问该 URL 得到的结果保存在七牛云存储,但是保存的 key 为空的 key 值(不是不存在)。
-
七牛的镜像存储看起来和传统的 CDN 比较像,两种都会在加速节点数据不存在的时候回源站抓取。不同之处在于,镜像存储是存储(和普通的存储没什么不同,镜像功能只是存储的一个特性),不是缓存,故此镜像存储对每个资源来说只回源一次,后续访问的时候就不再回源了。所以源站的数据发生变化的时候,你需要主动去删除镜像存储里面的文件,从而达到强制刷新的目的。
-
如果终端用户第一次访问某个资源,终端用户首先从七牛服务器上访问资源,再让七牛的服务器回源站取资源,然后将取回的资源缓存在七牛云存储上。因此,第一次访问会有一定的延时,可能比从源站取稍微慢一点,这是正常的,但是第二次第三次访问就可以直接从七牛的 CDN 上取,一般情况下比从源站取资源会快很多。也正因为镜像存储第一次取资源时会有延时,因此不推荐镜像文件大小超过 5M 的大文件资源,否则第一次访问会很慢或者出现服务器超时等错误。
-
大多数搜索引擎都提供有能够检测镜象站点的适当的过滤系统,一旦发觉镜象站点,则源站点和镜象站点都会被从索引数据库中删除。可以给镜像空间独立上传一个 robots.txt 禁止搜索引擎索引。可使用七牛提供的:robots.txt模板文件。也可以新建一个二级域名,如img.ludou.org,把要CDN的文件放到这个二级域名下,然后将这个二级域名镜像到七牛。这样就不会镜像到主站,被搜索引擎误会了。
参考摘取:
使用七牛的镜像存储功能可能会导致网站被K
七牛的镜像存储介绍和其原理
镜像存储功能在源站 URL 含有问号时的抓取资源规则
镜像存储与 qrsync 数据同步的使用