前段时间,team使用了七牛镜像的功能,用到了,就决定了解一下。
全站HTTPS成功后,页面仍然看不到标志性的小绿锁,打开devtool,看到一行warning
七牛官网的说明如下:
设置镜像存储,源站资源(文件/图片等)根据初次访问自动同步到七牛云存储,数据平滑迁移。可使用绑定的自定义域名访问镜像存储的源站资源。
image.png
配置镜像存储后,因为镜像源和镜像空间内容基本一致,将可能导致搜索引擎对源站进行封锁,可配置搜索引擎的
robots.txt 文件避免此情况发生。
是由于全站https后,仍然引用的http的图片资源。接下来记录下配置https访问七牛资源的步骤。
配置方式如下:
业务模型:
image.png
按照《七牛镜像存储使用手册》中所述,分为三个步骤
登陆七牛,选中一个存储对象,点击存储镜像,输入镜像源,也就是你网站的地址,点击保存设置即可。页面如下:
配置自定义域名
需要给七牛图片空间(如 image1)配置一个自定义域名(如,image11.abc.com)
- 先在七牛购买证书,补全域名信息后完成购买。购买完成后出现如下信息,
image.png
- 在自己的DNS控制台增加一个二级域名
image11.abc.com
,然后在自己的服务器配置二级域名image11.abc.com
(服务器配置此处不作赘述)。并在上图红线所示的目录创建文件fileauth.txt
,将验证文件值写入文件,重启服务器。在访问http://image11.abc.com/.well-known/pki-validation/fileauth.txt
时,能看到验证文件值。
注:
此处与阿里云证书购买不同,没有提示配置服务器HTTPS的步骤(也不需要),不需要下载证书,因为后面会配置CNAME的记录值到七牛存储空间,不需要进一步配置自己的服务器,仅保证能访问到fileauth.txt
的内容就可以了。
- 验证成功后,进入需要操作的图片空间,点击域名绑定,在加速域名的输入框输入
image11.abc.com
,通信协议选择HTTPS,再选择刚才的购买的证书。选择好其他配置项后,点击创建。
将非结构化数据的源站配置为七牛空间的镜像源站。
选择空间,然后在空间的概览页面里,找到镜像存储,然后在镜像源对话框内填入用于回源抓取资源的源站域名。比如将空间
image1
的镜像源站配置为http://image1.abc.com。
假设我们输入的镜像源是
,你的七牛存储对象的地址是 xxx.qiniu.com ,然后你可以访问
xxx.qiniu.com/830384/o_qiniu-page.png ,其实他最终访问的是
,也就是上面的那张图片。而且你会在你的存储对象中看到相应的图片。
配置CNAME
自定义域名审核通过之后,在客户的DNS服务设置那里,就可以根据审核通过后提示的CNAME目标来将自定义域名绑
定到七牛的空间域名。
image.png
看到上图后,就说明配置成功了,然后返回自己的服务器,可以将
image11.abc.com
二级域名的配置注释掉。
然后还可以在存储空间的内容管理选择默认域名外链(此步骤非必须)。
至此就完成了,可以尝试访问以下https://image11.abc.com/path/1234567.jpg
,看看是否有小绿锁出现。
本文记录个人配置的过程,有错误的地方,还各位望指正。
本文还参考了:
如何配置域名的
CNAME
融合CDN快速入门
同样如果我们的地址是一个 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
是类似这样的:
,那么镜像存储会将文件 d.txt 抓取过来,并在七牛保存为a/b/c/d.txt
(在七牛云存储中称为 key),忽略问号后面的参数。如果源站的 URL
是类似这样的:
,那么镜像存储会将访问该 URL 得到的结果保存在七牛云存储,但是保存的
key 为空的 key 值(不是不存在)。 -
七牛的镜像存储看起来和传统的 CDN
比较像,两种都会在加速节点数据不存在的时候回源站抓取。不同之处在于,镜像存储是存储(和普通的存储没什么不同,镜像功能只是存储的一个特性),不是缓存,故此镜像存储对每个资源来说只回源一次,后续访问的时候就不再回源了。所以源站的数据发生变化的时候,你需要主动去删除镜像存储里面的文件,从而达到强制刷新的目的。 -
如果终端用户第一次访问某个资源,终端用户首先从七牛服务器上访问资源,再让七牛的服务器回源站取资源,然后将取回的资源缓存在七牛云存储上。因此,第一次访问会有一定的延时,可能比从源站取稍微慢一点,这是正常的,但是第二次第三次访问就可以直接从七牛的
CDN
上取,一般情况下比从源站取资源会快很多。也正因为镜像存储第一次取资源时会有延时,因此不推荐镜像文件大小超过
5M 的大文件资源,否则第一次访问会很慢或者出现服务器超时等错误。 -
大多数搜索引擎都提供有能够检测镜象站点的适当的过滤系统,一旦发觉镜象站点,则源站点和镜象站点都会被从索引数据库中删除。可以给镜像空间独立上传一个
robots.txt
禁止搜索引擎索引。可使用七牛提供的:robots.txt模板文件。也可以新建一个二级域名,如img.ludou.org,把要CDN的文件放到这个二级域名下,然后将这个二级域名镜像到七牛。这样就不会镜像到主站,被搜索引擎误会了。
参考摘取:
使用七牛的镜像存储功能可能会导致网站被K
七牛的镜像存储介绍和其原理
镜像存储功能在源站 URL
含有问号时的抓取资源规则
镜像存储与 qrsync
数据同步的使用