七牛镜像的使用
前段时间,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 数据同步的使用
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?