前言
带宽联盟是 Cloudflare 推出的一项服务,由一群具有前瞻性思维的云服务和网络公司组成,致力于为共同客户降低或免除数据传输(带宽)费用。为什么能做到非常低甚至能免除成本呢?云厂商跟 Cloudflare 直接的数据传输,是通过专用网络接口 (PNI) 或专用互连的,中间不经过任何网络提供商(比如电信),既然是直连,那么就不存在 PNI 的增量成本了,自然也就便宜了。虽然阿里云不是第一批加入带宽联盟的,但是到现在为止也加入一年多了(我白嫖也一年多了),并推出了 Cloudflare+Alibaba Cloud OSS 的解决方案。这点还是非常良心的,虽然腾讯云后来也加入了,但是我觉得不够“清晰透明”,就一直没试过。
虽然有时候 Cloudflare 是“减速 CDN”,但是既然咱选择了白嫖,那么就要贯彻到底了,对于有海外业务的小伙伴来说,这样反而能省下不少的开销
- 存储费用
根据存储费用文档,我们可以了解到,在海外(部分)区域,标准存储(本地冗余)容量支持使用5 GB/月的免费额度(即每月标准存储(本地冗余)容量≤5 GB时,不收取标准存储(本地冗余)容量费用)。
虽然不支持中国大陆免费 5GB 存储,不过并没有关系,支持的话我也不推荐你用,往下看就明白了。
- 流量费用
根据流量费用文档,我们可以了解到,在海外(部分)区域,外网流出流量(oss_flow_out)支持使用5 GB/月的免费额度(即每月外网流出流量≤5 GB时,不收取外网流出流量费用)。
有的小伙伴可能会好奇,既然可以免流,那这 5GB 外网流出流量还有什么用呢?看我上面那张图,你会发现,外网流出流量,无法做到完全没有。我每个月都有几 KB 的漏网之鱼,这还是我用量少的情况下,用的多自然就可能漏的多。原因就是你无法把缓存命中率做到 100%,可能我设置方式不是最优,但是能做到接近 100% 也就够了。但我们还需要防范直接打到源站的流量,这 5GB 相当于一个缓冲,如何防范打到源站,我下面也会讲。
- 请求费用
根据请求费用文档,算了没必要看了,请求费用是需要收费滴,不过好在便宜,几乎可以忽略不计。
想必有经验的小伙伴已经察觉到了,这套方案防 D 不防 C,不过方案是有平替的,只是各有优劣。但对于本身有这个需求的用户来说,确实能省钱。
- 最后,是 Cloudflare 这边的费用
对于阿里云来说,传输到 Cloudflare 是零出口费用。
有一点需要特别注意:出口传输费优惠或豁免可能需要与托管服务提供商注册,不适用于源于中国大陆的数据传输。也就是说,OSS 源站必须是海外节点,所以大陆节点没有免费 5GB 存储,其实无所谓的啦!
主要操作流程
- 创建 Bucket:开通 OSS 并创建 Bucket。创建 Bucket 时选择海外的地域(如果在别的地域没有服务器的话,建议使用香港),存储类型选择标准存储即可,读写权限一定要选择私有,其余的附加服务按需启用(有的得加钱)。
但为了让图床正常使用,需要设置让Cloudflare的ip能够访问。
Cloudflare的ip官方已经给出了:
简单处理一下,
173.245.48.0/20,103.21.244.0/22,103.22.200.0/22,103.31.4.0/22,141.101.64.0/18,108.162.192.0/18,190.93.240.0/20,188.114.96.0/20,197.234.240.0/22,198.41.128.0/17,162.158.0.0/15,104.16.0.0/13,104.24.0.0/14,172.64.0.0/13,131.0.72.0/22
- 配置访问权限:进入权限控制 -> Bucket 授权策略面板,添加授权,配置如下图。
- 配置 CDN:在 CloudFlare 的 DNS 管理面板添加 CNAME 记录,目标设为 Bucket 的域名(可以在 Bucket 的概览界面找到),代理状态设为已代理,否则 CDN 不起作用。
- 绑定域名:在阿里云的 Bucket 配置 -> 域名管理界面绑定你刚设置的域名,这时阿里云需要验证域名的所有权,按照其所说的在 CloudFlare 的 DNS 管理处添加指定 TXT 记录即可。
- 创建并添加证书:在 CloudFlare 的配置面板的 SSL/TLS -> 源服务器处,选择创建证书。创建之后会告诉你源证书与私钥,这个界面暂时不要动。打开刚才在阿里云控制台绑定证书的界面,选择证书托管,并上传 SSL 证书,这时会打开 SSL 证书的界面,选择上传证书,并将 CloudFlare 给出的源证书和密钥复制到上传证书的对应字段处(证书名字随便设),然后确定。这时切换回上传 SSL 证书,应该就能在证书名称处看到刚刚设置的证书名字了(看不到的话重开一下这个界面试试),选中,然后点下方的上传即可。
然后我们查看域名绑定配置,发现已经绑定上了。然后我们去上传一张照片。
自有域名选择自己配置好的解析域名,我们就可以看到 URL 已经变成咱们自定义的啦!
安全性配置
- 跨域设置:在阿里云 OSS 的数据安全 -> 跨域设置中创建跨域规则,来源设置为你的网站的地址。为了能让网站在本地测试时也能正常展示图片,建议同时添加
localhost:*
与127.0.0.1:*
。 - 防盗链设置:和跨域设置类似。不同之处在于 Referer 是包含请求协议的,所以类似于
example.org
或localhost:*
等不包括协议的配置是无效的,需要改为https://example.com
或*://localhost:*
;需要注意的是*.example.org
虽然是有效的,但是没有指定 https 协议,安全起见最好改为https://*.example.org
。 - 设置错误页:S3协议的bucket在公开读的权限下会默认展示桶内文件列表和路径,特征明显而且并不友好。绝大多数的对象存储都支持设置静态网站
index.html
和错误页404.html
的设置,比如阿里云OSS在【基础设置】-【静态页面】下。这里随手找了两个单页供选择和参考 - CloudFlare安全规则:
PicGo 配置
PicGo 是一款快速上传图片到图床,并自动复制图片 URL 到剪贴板的工具,你可以在 Github 的 release 页获取该程序。
- 权限设置:在阿里云的权限控制 -> Bucket 授权策略面板新增授权,配置如下:
如果当前没有 RAM 子帐号,请点击右上角头像 -> 访问控制,然后在左侧的身份管理 -> 用户处创建一个子帐号。创建完成后在子帐号的详情页创建 AccessKey,得到 AccessKey 的 KeyID 与 KeySecret,保留备用。
- 上传配置:打开 PicGo 主界面,在图床设置 -> 阿里云 OSS 内填写对应的表单项。“KeyID” 与 “KeySecret” 即刚才获取的子帐号 AccessKey 的 KeyID 与 KeySecret,“设定 Bucket” 为 Bucket 的名称,“存储区域” 为 Bucket 所在区域(与 Bucket 域名内的值统一,例如
oss-cn-hongkong
),自定义域名填写你设置的域名,其余两项按需填写即可。配置完成后点击确定并设为默认图床。
参考网站:
https://blog.furffisite.link/p/imagebed-oss-conf
https://blog.besscroft.com/articles/2022/distributed-storage-oss/
评论