【对象存储】搭配CF带宽联盟实现流量免费

发布于 / 信息应用 / 20 条评论

CloudFlare是全球知名的CDN服务提供商,其与诸多云服务商构建的带宽联盟为末端用户提供了极大的流量优惠。本文将结合博主在Backblaze(B2)和阿里云OSS使用上的实践探索,简单展示在搭配使用CloudFlare CDN和保护源对象存储的一些技巧,希望大家能够喜欢~

顺便值此新春佳节之际,感谢诸位一直以来对博主的支持,简单地新的一年祝大家阖家欢乐、学习进步、事业有成哦啊♪(´▽`)~


一、概述

带宽联盟

带宽联盟是由CloudFlare主导组建的旨在节省云计算服务商间数据流量开销的组织,换句话说就是节省IDC间的流量传输,减少各IDC通过基础ISP向互联网传输资源支付的费用。在这个联盟中,受益最大的就是CF和末端用户,CF借此巩固自身的互联网带宽权益地位,更有底气向ISP压低带宽价格,用户则获得了来自服务商的流量费用豁免。目前根据实际测试,带宽联盟的流量节省方式主要是CF与服务商构建对等互联或选择低价的ISP/IXP完成互联。

虽然加入带宽联盟的服务商有二十余家,不过是否向末端用户提供优惠仍取决于各服务商自身的政策。值得一提的是,像AWS和Google这样在互联权益地位很高的服务商,对带宽联盟基本是持拒绝或仅提供基础支持的态度,这是因为利益的冲突驱使他们不愿向CF转让自己的权益优势,从IDC的角度来看这是无可厚非的。

#官方简介
https://www.cloudflare.com/zh-cn/bandwidth-alliance

支持的服务商

正如上文所言,并不是所有参与带宽联盟的服务商都向用户提供这样的优惠,以下推荐是博主和朋友亲自测试确认的结果,欢迎大家进行补充。

(1)阿里云阿里云OSS已确认除迪拜和中国大陆的地域外流量传出至CF边缘节点不计费。计费项目包括存储费用和请求费用,国内版产品定价(点击前往),国际版产品定价(点击前往)。注意,仅有国际版客户拥有每月1亿次的免费读请求额度。其优点是功能完善,地域众多且网络对大陆友好,有各类资源包供选购;缺点是费用偏高,计费方式复杂。

#官方说明
https://www.aliyun.com/product/news/detail?id=17749

(2)Backblaze(B2)Cloud Storage已确认流量传出至CF边缘节点不计费。计费项目包括存储费用(0.005/G·月)及列目录、读取的B/C类请求费用(0.004/万次),产品定价(点击前往)。其优点是价格非常友好且计费灵活;缺点是地域不可选、功能很少、可用区网络质量较差。

#官方说明
https://www.backblaze.com/b2/solutions/content-delivery.html

(3)DigitalOceanSpaces Object Storage已确认流量传出至CF边缘节点不计费。计费项目只有存储费用,不计请求费用,但需要选择5USD/月的基础套餐,产品定价(点击前往)。博主并没有亲自使用这个服务因此不做过多评价,显而易见的优点是计费非常简单;缺点是不够灵活,仅有一种包计费模式。

#官方说明
https://www.digitalocean.com/community/questions/bandwidth-alliance-status


二、连接CloudFlare

连接到CloudFlare需要为存储桶绑定域名,然后在CloudFlare设置CNAME到桶域名。像阿里云OSS、腾讯云COS等经过自行开发的是可以直接通过相应的域名绑定页面进行绑定,其余的AWS S3、Scaleway之类的是通过设置bucket名称为域名进行绑定,只有B2选择的方式非常特别。

另外建议为自定义的域名在CloudFlare添加一条页面规则,将SSL设置为灵活(即HTTP回源),因为多数对象存储不支持自定义域名SSL访问,选用HTTPS回源的话是不必要的(但是B2是不允许HTTP访问的就必须要设置为HTTPS回源)。其余的页面规则可以按照自己按照其需求自行添加,在此不做赘述。

阿里云OSS等

阿里云绑定自定义域名很简单,在【传输管理】-【域名管理】中,点击绑定域名按流程即可完成绑定。需要在CloudFlare指向的桶域名,也可以在概览中的外网访问Bucket域名找到。

Backblaze

B2选择的绑定方式就非常特别了,在bucket文件管理页面上传一个文件,点击右侧信息按钮可以在其中获得Friendly URL,将你的域名CNAME指向链接中域名比如f004.backblazeb2.com后,就可以将链接中域名替换为自己的域名实现访问。B2的服务器是向任意域名接入,bucket间域名公用仅以目录区分,这样存在的隐患十分明显,文件链接完全公开而且自定义域名可被其他用户使用。

CloudFlare近期的【转换规则】可以完美解决这个问题,在【创建转换规则】下选择【重写URL】,传入匹配建议如图选择相应主机名,随后在路径下找到重写到,选择Dynamic动态模式,按如图修改/file/lms-example为即需要隐藏的目录填入框内即可。这样访问链接中bucket路径便被隐藏了,既美观也减少了被滥用的可能。

同样的,利用转换规则隐藏部分目录也可以用于其他的对象存储服务商,因为绝大多数的对象存储公共访问链接是有迹可循的,被有心之人找出并利用可能会产生巨额的流量费用。我们可以在bucket中新建一个用于存放对外访问的文件夹,然后与B2的操作一样将该目录通过动态重写隐藏掉,这些可以自行发挥。


三、隐藏Bucket特征

设置错误页

S3协议的bucket在公开读的权限下会默认展示桶内文件列表和路径,特征明显而且并不友好。绝大多数的对象存储都支持设置静态网站index.html和错误页404.html的设置,比如阿里云OSS在【基础设置】-【静态页面】下。这里随手找了两个单页供选择和参考(点击前往)。

显然,像B2这种简单粗暴的是又一次没有这样的功能,可以如图使用URL重写规则将主页静态定向至index.html。404页面的功能没有一个比较好的办法,不过B2的友好访问链接不会展示目录列表和bucket信息,影响并不大。

隐藏bucket标头

在对象存储的标头中会包含有一些bucket信息,可以通过控制台的Network选项卡暴露出来,也是对对象存储特征的一个暴露点。

 

通过CloudFlare转换规则中的【修改响应头】,能够简单地实现响应头的去除,同时还可以加入跨域请求头等需要的标头。

目前B2和OSS可以隐藏的标头大致如下,其他对象存储请根据实际情况去查看和配置,在此就不一一列出了。

阿里云OSS Backblaze B2
x-oss-hash-crc64ecma x-bz-content-sha1
x-oss-object-type x-bz-file-id
x-oss-request-id x-bz-file-name
x-oss-server-time x-bz-info-src_last_modified_millis
x-oss-storage-class x-bz-upload-timestamp

禁止访问文件

同样的,通过页面规则中的URL重写功能,我们也能够实现诸如对特定目录、特定后缀(如图.php)的禁止访问,重写至错误页面即可。不过需要注意的是,转换规则是下方规则优先级更高,而页面规则是上方规则优先级更高。


四、CloudFlare安全规则

页面规则

CloudFlare页面规则前文有提到,免费版提供3条规则,在这里也可以设置一些边缘缓存有效期、缓存内容等等细致的配置。博主来自对象存储的静态资源一般进行如下的配置,如果有特殊的需要可以自行结合实际去探索。

防火墙规则

CloudFlare防火墙有5条免费的防火墙规则,入口在【防火墙】-【防火墙规则】,能够实现很细致的安全规则,比如图中配置即为开启验证码。其他的项目在这里暂时不做过多的讲解,等后续有时间,我们再展开详细聊一聊CloudFlare防火墙的规则应用。


五、结语

此外还有一些对象存储比如Scaleway提供每个月免费75G的空间和流量且不计请求,腾讯云COS的带宽联盟优惠政策也在推进,选择不止局限于博主提到的几家,能够以最低的成本满足自己需求的才是最佳的选择。

关于对象存储搭配CloudFlare使用的探索到这里就结束了,回想起来有一些的尝试并没有什么具体意义,也没有起到很大的作用。这篇博客就在此简单做一个记录吧,希望其中的一些技巧能够对诸位的使用有一些启发。其他的使用技巧,也欢迎与博主进一步交流~


*原创文章,转载请注明出处

转载原创文章请注明,转载自: Luminous' Home » 【对象存储】搭配CF带宽联盟实现流量免费

  1. 大佬能不能搞下CF R2的教程

    1. @0.0 R2还没有看到太大的使用价值,等进一步完善之后的吧。目前存储桶只能私有访问,也不能直接绑定域名,对外访问还需要授权给Workers反代出去。
  2. 是支持除了迪拜以外的所有非中国内地区域。

    1. @Zero 已修改,感谢指正~
  3. 我用的是阿里的oss,ping
    bucket的域名可以看到ip,如果解析a记录添加bucket的ip,这样也可以流量免费吗?

    1. @likeyou 效果是一样的,只是指向IP后面可能会失效。CNAME递归解析最终就是IP,阿里云方面对OSS节点修改并不会通知你,而是直接改OSS域名的解析,如果刚好你A指向的IP下线了那就无法使用了。CNAME指向的话,会继承解析变动不受影响。
  4. 你好 问一下 cf解析a记录添加bucket的ip跟cf解析cname添加bucket的域名有啥区别吗?

  5. 话说不知道Scaleway绑定域名呢,直接CNAME解析出问题。

    1. @avalonsky bucket名称设置为域名,然后CNAME过去即可,不支持https访问
  6. 我记得Scaleway也是带宽联盟的一员,而且储存套cf也是免流量来着(虽然这一点我问过客服没有自己实践过)

    1. @纯之 带宽联盟成员蛮多的,但是不一定下放优惠,文章里也提到了scw根据20年的提问当时依然是计算上行的,具体还是实际测试吧。
  7. 去年十月测试过,阿里云OSS国内版似乎用国外节点搭配CF带宽联盟是可行的。

    1. @lybwroay 可行,不管国内还是国际站,非中国大陆区域到CF都不计上行流量。不过文中官方页面提到的免费1亿请求和图片处理是仅提供给国际版客户的。
  8. DigitalOcean是真的不建议用,太“神经过敏”了,多点一下鼠标都可能导致封号,而且封完了直接删数据(包括所谓的“购买备份”!!!),如果找客服的话会直接发一模一样的回复模板:一,账户是不可能恢复的(I have manually reviewed your account and it is not eligible for activation);二、封号原因是不可能告诉你的(We’re unable to share details as this is critical to our security systems);三、你下次敢来我还给你删库(Any new accounts created will be subject to the same security reviews)。太危险了,数据存在DigitalOcean真的是在把自己的Digital往Ocean里面扔……如果是国内企业这样搞的话估计早被送上消协了

    1. @tzchz do可能是因为GitHub学生包的赞助还有初始赠金挖矿滥用拉高风控的,确实是这样的问题,如果长期使用还是尽量选择老账户吧。
    2. @tzchz 自己的号老老实实用一点问题没有 吃了码的就容易被风控了
  9. 学习了!

  10. B2 还是用 Cloudflare Workers 处理一下桶子,转发一下比较安全。

    1. @Josephus 可以使用Workers,不过通过新建文件夹加转换规则来隐藏实际目录也能够避免暴露,看实际开销选择吧~
    2. @Josephus 我用Worker搭过一个,但转发就只能单线程下载了。这个有什么优化方案吗?