在早期的一篇文章《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 被盜刷的風險。