在早期的一篇文章《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://www.xiaoz.me/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被盗刷的风险。