在早期的一篇文章《Backblaze B2,低价的对象存储,支持接入CloudFlare CDN》介绍了Backblaze B2接入CloudFlare CDN的教程,但存在一个缺陷,B2的域名会将bucket
名称暴露出来,会导致你的CloudFlare加速域名任何人都可以用来加速Backblaze B2或者直接访问源站进行盗刷,不仅不友好,还不安全。
举个例子:
- B2提供的域名格式为:
https://f002.backblazeb2.com/file/bucket/xxx.txt
- 使用CloudFlare加速后域名为
https://b2.domain.com/file/bucket/xxx.txt
假如我在B2创建了一个bucket名称为xiaoz
,那么我就可以访问你的CloudFlare域名https://b2.domain.com/file/xiaoz/xxx.txt
,从而导致占用你的CloudFlare流量。
或者我直接访问你的源站:https://f002.backblazeb2.com/file/xiaoz/xxx.txt
进行流量盗刷。
这篇文章的目的就是去掉B2极其不友好的URL路径,隐藏file/bucket/
这一串内容。
前提准备
如果您的B2域名还未接入CloudFlare,请参考这篇文章:https://blog.xiaoz.org/archives/13256进行接入。
创建转换规则
CloudFlare后台 - 规则 - 转换规则 - 创建转换规则 - 重写URL
继续填写:
- 规则名称:随便写
- 字段:选择“主机名”
- 运算符:选择“等于”
- 值:填写您在CloudFlare上对B2的加速域名(你自己的域名)
然后路径选择“重写到 - 选择Dynamic”,并填写:
concat("/file/bucket", http.request.uri.path)
其中bucket
改成你自己的存储桶名称,然后选择部署就行了。
优化后
优化前我们的访问路径为:https://b2.domain.com/file/bucket/xxx.txt
优化后的路径为:https://b2.domain.com/xxx.txt
可以看出去除了file/bucket/
去除不必要的响应Header
Backblaze B2会在请求的响应头中添加以下几个header参数:
- x-bz-content-sha1
- x-bz-file-id
- x-bz-file-name
- x-bz-upload-timestamp
虽然影响不大,但是一看这些参数就知道你用的B2,并且这些参数头一般拿来也没啥用,我们也可以通过CloudFlare的重写规则将其去掉。
依然在转换规则那里 - 创建转换规则 - 修改响应头。
主机名那些和上面的一样:
然后那里全部选“Remove”,最后填写上面那几个header头部即可。
总结
CloudFlare与Backblaze B2之间的传输流量是免费的,通过CloudFlare转换规则可以隐藏bucket名称,让URL更加友好,同时一定程度上防止了Backblaze B2被盗刷的风险。
此文部分内容参考了:【对象存储】搭配CF带宽联盟实现流量免费
除了使用这个方法,还有没有其它方式可以实现这个功能
这个是最简单省事的办法了,nginx反向代理也可以实现,但是比这复杂多了。
方便的话希望有空可以出一期教程
是不是需要https才可以?
CloudFlare回源B2的话必须选择https方式,不然访问不了。
那域名的证书在哪里添加?我按教程来,打开的图片提示521错误,找不到域名解析的主机?
小博客真没感觉有人来刷流量的
小心驶得万年船,哈哈。