mycpen

Mycpen

记录学习历程与受益知识
github
telegram
bilibili

01_轉載-圖床搭建 Backblaze B2 + Cloudflare CDN

相關連結#

  1. BlazeB2 - 基於 BackBlazeB2 和 Cloudflare 的圖床工具(未使用)

轉載文章#

  1. Backblaze B2 + Cloudflare CDN 可自定義域名的 10G 高速免費外鏈圖床

  2. 使用 Backblaze B2 + Cloudflare CDN + PicGo 實現可自定義域名的 10G 免費圖床解決方案

  3. 使用 Backblaze B2 和 Cloudflare 作為免費圖床

感謝 ReCreyed 的分享。以下內容全文摘自上面 3 篇文章

文章 1:Backblaze B2 + Cloudflare CDN#

本博客其他文章使用的都是 github 圖床,無意中發現了 B2+CF+ShareX 的自建圖床方案,而且還可以自定義域名,所以就有了這篇文章,本文所有圖片全部來自這種方法的圖床。

圖床指的就是儲存圖片的伺服器,網站管理員為了方便維護和管理,會將圖片存放在專門的伺服器集群裡,通常還會在外層套層 CDN 做分發。市面上的公開圖床很多,例如 imgur、sm.ms、imgbox 等等,這些圖床都開放了 API 方便開發者調用。不過由於運營成本問題,也有不少圖床相繼倒閉或者轉入收費。

怎麼自建圖床?如果是有 VPS 主機伺服器,安裝個 Chevereto 開源圖床網站程序即可。但這是 VPS 單純用來做圖床給博客外鏈圖片用,有點浪費且不易長久。圖片儲存最好是放在大公司的雲服務平台上, Backblaze B2 是一個雲儲存解決方案,類似於 Amazon AWS S3, 但是價格稍微便宜一些. Backblaze 的雲儲存每個註冊用戶擁有 10G 免費空間以及每天 1G 的下載流量,上傳流量不限。超過免費額度後的價格以及與其他幾家主流商家的對比見下圖。

img

在 backblaze 儲存 1T 的內容也僅需 $5 / 月,不過流量費還是比較貴的 ,上傳流量不限。 由於 Bandwidth Alliance (帶寬聯盟),Backblaze 到 Cloudflare 之間的出口是完全免費的, 所以 Backblaze B2 可以配合 cloudflare CDN 來使用達到無限免費下載流量。

img

Backblaze 宣布與 Cloudflare 合作,免除掉 Backblaze 到 Cloudflare 的流量費用。

因此我們得到如下網盤 / 圖床產品:

  • 10G 儲存空間免費, 全球最可靠的雲儲存服務

  • 上行免費

  • 下行免費

  • 可自定義域名

  • 全球最強 CDN 加速

搭建自定義域名圖床教程開始#

首先,你需要有一個域名,選擇一個子域名作為圖床的域名。 關於圖床的二級域名命名,一般有以下幾種:

  • img
  • images
  • assets
  • static (不僅存放圖片,還有存放 css、js)

然後,創建 Backblaze B2 Bucket (儲存桶) 。

Backblaze’s B2 storage 註冊一個帳號,註冊好了後,在後台面板選擇 “Buckets”(儲存桶),然後點擊 “Create a Bucket”,創建一個儲存桶。選 Public,以便所有人可訪問。

img

然後,回到 “Buckets (儲存桶)” , 在你剛剛創建的儲存桶上,點擊 “Upload/Download (上傳 / 下載)”. 上傳一個臨時的測試文件到儲存桶中,然後在你剛上傳的文件處,點擊 “i (information,信息)”. 這是為了獲取下一步需要的信息,你的儲存桶處於哪台伺服器上。

img

img

在上面的截圖中,可以看到,我的文件是放在 https://f000.backblazeb2.com/ – 記住這個域名
最後,獲取到地址之後就登錄 cloudflare,給你的域名添加一個子域名,並新增一條 cname 記錄,指向文件地址中的域名,例如將 img.coca.cc 通過 cname 到 f000.backblazeb2.com,效果便是https://img.coca.cc/file/imgsgj/img.jpg 指向 https://f001.backblazeb2.com/file/imgsgj/img.jpg

img

根據上面截圖中的記錄,我使用這個子域名 img.coca.cc 作為圖床的域名,並且指向 f000.backblazeb2.com. 確保 Cloudflare 橙色保護盾是開啟的狀態,這代表請求是通過了 Cloudflare 的 CDN 代理層. Cloudflare 默認的 TTL 將被設置為 auto (自動).

雖然啟用了 CloudFlare CDN,但發現緩存永遠不能命中(MISS),我們需要對添加一個緩存指令(默認是不緩存),打開儲存桶設置,桶信息設置為 {"cache-control":"max-age=43200"},其中 43200 單位為秒 (s),意思就是說 43200 秒內 CF 不會去從源站重新獲取資源。

img

Cloudfalre 的 ssl 設置需要使用 full,因為 backblaze 僅提供 https 訪問地址。

img

當然你如果覺得文件鏈接不好看太長了,你也可以使用 cloudflare 自帶的頁面規則 301 ,縮短鏈接地址,比如通過 https://img.coca.cc/img.jpg 直接訪問 https://f001.backblazeb2.com/file/imgsgj/img.jpg
例:
匹配規則 https://img.coca.cc/*
重定向網址到 https://f001.backblazeb2.com/file/imgsgj/$1

img

加一條頁面緩存規則

img

最後,請注意:Backblaze B2 流出到 Cloudflare 的流量是免費的,也就是說就算 CF 回源 B2 也沒有 $0.01/GB 的流出流量費,相當於免費無限流量。不過這並不能阻止壞蛋直接用 B2 的域名(而不是套了 CF 的域名)刷流量。

最後修改:2021 年 03 月 01 日

文章 2:Backblaze B2 + Cloudflare CDN + PicGo#

前言#

近期,由於伺服器需要擴展功能,以及阿里雲推送日誌時有所不便決定重新購買伺服器並部署相關網站和服務。決定趁此機會對圖片儲存進行規範,由於網站未備案,國內的阿里雲 OSS + 阿里雲 CDN、又拍雲、七牛雲等廠家提供的服務無法享受,只能將目光轉向國外。

原本使用 Github+JSDelivr 是一個很好的免費圖床解決方案,且網上教程也很多,但 2020 年 8 月 9 日 JSDelivr 發布的新使用政策中第四條引起討論

4. Prohibited Use

The following behavior is prohibited:

 1. Hosting or accessing content that:
     - contains malware or harmful code in any form,
     - violates proprietary rights of others,
     - is sexually explicit,
     - is potentially illegal in the EU or the USA.

 2. Abusing the service and its resources, or using jsDelivr as a general-purpose
    file or media hosting service. This includes, for example:
     - running an image hosting website and using jsDelivr as a storage for all
       uploaded images,
     - hosting videos, file backups, or other files in large quantities.

    We recognize that there are legitimate projects that consist of a large number
    of files, and these are not considered abuse. For example: icons packs, apps,
    or games with a large number of assets.Copy

running an image hosting website and using jsDelivr as a storage for all uploaded images這句話有所歧義,因為無法判斷個人博客和文章上傳的圖片數量和訪問量是否會被判定為圖片儲存站,導致封禁或刪除數據,只能尋求其餘解決方案。

此時發現Cloudflare Bandwidth Alliance 寬帶聯盟寬帶聯盟中包含 Backblaze,Backblaze 到 Cloudflare 的所有出口流量完全免費。再加上 Backblaze 對個人用戶提供 10G 的免費儲存額度,每天 1G 的下載量與無限上傳量。我們可以同時使用兩者達到 10G 免費額度與不限量上傳下載。

3961390e212619b300d72abb1c6d7467-NyquapNRbB

在超過免費儲存額度之後,相比其他幾家國外主流 OSS 服務提供商,Backblaze 的價格也較為低廉,唯一的缺點是目前只支持信用卡支付。

92f663d63338db8becab34b40760b0c3-i5xUgrOY5D

前置條件#

  1. 一個域名~最好是一级域名,即 xxx.xxx 這種類型的。搜索任意域名供應商即可購買,比較推薦 NameSlio,支持支付寶付款,免費的 Whois 隱私保護,同時價格便宜。.com域名每年僅需要 9.95 美金,如果不是很在乎可以買其他後綴只買首年,2 美金一年。免費域名也有一些可以申請,比較出名的就是 freenom 的域名了,不過聽說今年 Cloudflare 的免費服務不再支持免費域名,所以只能自己試試是否能夠成功。

Backblaze OSS 部分#

  1. 此處進入,創建 Backblaze 帳號並完善相關信息,直接從首頁進入可能沒有 Sing Up 選項
  2. 此處進入控制台,創建 Buckets 儲存桶儲存桶
  3. 給儲存桶起一個名字方便識別且不易被猜測即可,無需在意生成的圖片鏈接長短,後續可以進行重定向方便識別且不易被猜測即可,無需在意生成的圖片鏈接長短,後續可以進行 301 重定向,並將Files in Bucket are修改為Public
    注意:給儲存桶起名時盡量起不易被別人猜測的名字,可在其中增加部分隨機字符,如c42rx71-example-winer-website,因為在儲存桶的模式為 Public 時,別人只需知道你的 OSS 服務提供商 + 儲存桶名稱 + 其中一個文件名,即可拼湊出文件真實鏈接,從而繞過 CDN 刷空你的免費流量,如果有綁定支付方式還會扣費。

80ddd93eafadbb256b763fa1ae4e0757-image-20210914161619618

  1. 點擊Upload/Download上傳一張圖片或臨時文件,用於後續獲取儲存桶所在的伺服器地址
  2. 從左側菜單欄的Browse Files進入剛剛的儲存桶並找到上傳的文件,點擊查看詳細信息,記住Friendly URL行的鏈接內容

a875ac31d761acd0f2d4e23a2c4d500d-image-20210914161911330

  1. Friendly URL的鏈接可以看到我們的儲存桶位於https://f002.backblazeb2.com/,而/file/example-winer-website則是存放文件目錄的相對路徑,記住這兩個值後登錄 Cloudflare 進行設置。

Cloudflare 部分#

  1. 打開Cloudflare 官網並進行註冊
  2. 根據提示前往域名註冊商修改 DNS 解析伺服器到 Cloudflare 提供給你的伺服器地址不同用戶地址不同不同用戶地址不同,個人使用選擇免費計劃即可

c4693f6f0580b728b9315b2754d10d7d-image-20210911163637613

  1. 添加一條 CNAME 記錄到你剛剛得到的儲存桶伺服器,二級域名可以根據喜好選擇,但一般使用這幾種

    oss
    img
    images
    assets
    static(不僅存放圖片,還存放網站加載時的css、js文件)
    

669afcbfe869f4fb67cee2a9132a87bc-image-20210914162453761

  1. 此時等待 DNS 解析完成後我們就完成了通過 Cloudflare 訪問 Backblaze 的設置,可以使用瀏覽器的開發者工具,訪問二級域名下對應網址來查看是否命中 CDN 緩存。cf-cache-status行 HIT 代表命中緩存,MISS 代表沒有命中 CDN 緩存,回源到 Backblaze,此時會消耗下載流量。

9dab9b8dededc833583c61fb9615aaa5-image-20210911165431297

  1. 為了避免無法命中緩存或回源次數過多導致加載速度低下,我們需要回到 Backblaze 進行桶信息設置,添加{"cache-control":"max-age=86400"},意味 86400 秒內 Cloudflare 不再返回源站重新獲取信息。
    注意,回源時為 CDN 節點回源站重新拉去數據,然後再傳遞給用戶,並不是將源站地址直接轉給用戶,所以無需擔心回源過多導致的免費流量配額消耗完畢。max-age 可以不用太長,太長的話若源文件發生更改,且站點沒有主動推送到 CDN 節點時會導致用戶不能及時得到最新版本。(書寫本文時發現 BackBlaze 也存在免費請求次數顯示,B 類 C 類請求每天各 2500 次,暫時未確定 Cloudflare 訪問是否計算請求次數,故也不建議太短)

c5aa7f1948a64ce3cd9391ad316ac951-image-20210914162745460

  1. 可選可選不建議使用的重定向方式不建議使用的重定向方式通過 cloudflare 自帶的頁面規則 301,對於文件連接進行重定向縮短鏈接地址。按照下圖選項根據喜好進行創建即可,* 用於匹配所有的圖片路徑及名稱,$1代表使用星號部分的內容對網址進行補全。
    注意:

1. 匹配 URL 時,地址中的/img是必須的否則被轉發過的 URL 會再次匹配到轉發規則,造成重定向次數過多或其他位置錯誤,但是/img可以替換為任意不為/file/example-winer-website(你的儲存桶名)的字符串
2. 經過測試後發現,使用該方式進行的重定向在開發者工具 Network 頁面可以抓取到重定向後的鏈接直接新標籤打開圖片也可以獲取直接新標籤打開圖片也可以獲取,從而得到你的儲存桶名稱以及真是文件名,配合伺服器提供商即可拼湊真實地址進行惡意刷流量攻擊。故建議使用第 8 步的第二種創建方式。

da954ad89387900fa24ea3a96a9255da-image-20210914163315660

  1. 可選可選在查找資料時,見到有些地方建議在進行 URL 重定向後增加一條頁面緩存規則來防止緩存失效。按照下圖進行配置即可。但是在我進行測試時發現不增加這條內容,也可以命中 Cloudflare 的 CDN 緩存,故暫時未添加。也可以在此處增加安全級別選項,並設置為本質上為關,來保證主站被攻擊在 CDN 環節增加驗證時,寫在本地的 Markdown 文檔能夠正常加載圖片。
    猜測存在此步驟的可能原因是將緩存級別設置無查詢字符串時僅在圖片後不跟隨參數時使用緩存的內容,部分 OSS 供應商提供追加參數對圖片進行處理(如壓縮、剪裁、縮放)後發送的功能,若主站緩存級別設置為標準,此處修改部分內容設置後就可以使用那些功能。但 Backblaze 的免費服務並不包含這些,所以暫時用不到。若以後發現在問題或真正的原因會進行補充說明。

5e57fe3d244d67a57ba0e6f1b0b9256b-image-20210914164221363

8. 可選可選建議使用的重定向方式建議使用的重定向方式由於不使用鏈接重定向和使用頁面規則重定向均會暴露桶名稱,我們選擇通過重寫的方式進行解決。這種方式可以在鏈接不變的情況下改寫其中的內容。這次我們使用規則中的轉換規則進行頁面重寫。匹配主機名用於確定請求來源需要進行重寫,且再次匹配完整 URI 確認不包含已經重寫過的鏈接,避免出現反復重寫的錯誤。重寫路徑的 concat 含義為將兩字符串拼接,在請求的文件路徑前添加儲存桶路徑,而主機名 example.winer.website 在使用 concat 函數時無需書寫,會自動添加為傳入請求的主機名。(如一定要在 concat 函數內添加主機名,請不要帶http://https://開頭,而是在前面添加/進行替代,例如concat("/example.winer.website/file/example-winer-website", http.request.uri.path)
注:如果頁面規則剩餘不足或不想使用本方法,也可以參考本文創建私有儲存桶並使用 Cloudflare Workers 來進行訪問。鑑於 Workers 訪問方法已存在很久,且有眾多其他博主教程,不再進行書寫。但 Workers 同樣有免費限額,請注意。

de64d3a53e203c221c0969806ad58aa6-image-20210914164843797

搭配 PicGo 更好的進行圖床食用#

首先恭喜你,至此你已經完成了圖床基本搭建工作!下面是拓展部分

  1. 圖床搭建完畢後,若不進行其他操作,每次上傳圖片都需要打開 Backblaze 的網站並在完成身份驗證後進入桶設置頁面進行上傳,即不便捷也不友好。因此介紹一款跨平台且同時支持命令行與可視化界面的圖片上傳工具 ——PicGo
    主要功能即為上傳圖片到你指定的位置,並獲取圖片鏈接,搭配 typora 編輯器可以直接在粘貼圖片時就自動上傳並將鏈接寫入 Markdown 文檔,避免圖片在其它網站或放在本地後移動文檔導致的圖片丟失。
  2. 進入項目首頁,下載並安裝 PicGo
  3. 選擇插件設置,搜索s3或進入插件項目首頁下載並安裝該插件
  4. 安裝完畢後左側的圖床設置會多出 “Amazon S3”,對於所有與 S3 API 兼容的雲儲存均可使用
  5. 打開的Backblaze 官網的 AppKeys 設置頁面,添加一個新的 Key 建議不要使用建議不要使用 MasterApplicationKey,按照如下格式設置並申請 Key
    注意:Key 的最長有效時間為 1000 天,即 86400000 秒,過期後請重新申請

209573ceb1bfacd10cfc6d61ae7b43fc-image-20210911203404570

  1. 記錄得到的Key ID、applicationKey、桶名稱、桶的Endpoint地址分別填寫到對應位置。同時將 301 跳轉或頁面重寫的网址填寫到自定義域名。其餘設置無需變更。保存後即可上傳圖片,也可以修改文件的命名方式或通過修改配置文件進行設置,詳見此頁面

注意事項#

到此為止所有工作都已完成,但是有一點需要注意:

  1. 通過這種方式上傳文件,文件路徑中如果包含空格,在 Backblaze 儲存時會將空格換為加號,所以路徑中包含空格的文件 PicGo 上傳後生成的鏈接並不正確。
  2. 通過此方法搭建的圖床或書寫的教程,切記不要洩露儲存桶名稱,避免刷流量,且建議給所有上傳文件的命名規則添加哈希值,使其不可猜測,避免儲存桶名稱暴露時獲取其他文件。

同時本文內建立的儲存桶並未使用,教程書寫完畢後立刻刪除,並創建了及其難以猜測的儲存桶名稱更改了相關地址,無需嘗試使用文中或圖中的信息進行訪問測試。

最後修改:2022 年 08 月 28 日 10 : 37 AM

評論區

剛下飛機的道士 May 24th, 2022 at 11:48 am

感謝大佬文章,現在 cloudflare 提供了 transform rules,可以不用 worker 進行路徑重寫了。

sakuya April 9th, 2022 at 02:44 pm

友情提示:
第 8 步的 concat"/example.winer.website/file/example−winer−website",http.requrst.uri.paht),似乎多了個括號,以及 request、path 寫錯了

winer August 28th, 2022 at 10:36 am

@sakuya

謝謝提醒,括號多的那個其實是因為外面有個中文的括號,只看有代碼標記的裡面就行
不過 request 和 path 確實是打錯了 hhhhh 圖片裡還沒錯,這就改掉

文章 3:Backblaze B2 + Cloudflare#

B2 是 Backblaze 提供的一個 OSS 儲存服務,有著 10G 的免費容量以及每天 1G 的免費流量。而且他還是 Cloudflare 帶寬聯盟的成員,通過 Cloudflare 傳輸 Backblaze 中的內容是完全免費的。即使在超出免費額度的情況下,$0.005 GB/Mo 的的容量和 $0.01 GB/Mo 的流量價格比起其他儲存服務的價格也十分便宜。

有許多其他文章也介紹了如何使用 B2 和 CF 作為免費圖床,但現在 CF 有了新的轉換規則功能,和其他文章使用的 Worker 和頁面規則比起來,轉換規則提供了更多的免費條目,也更易於使用。

當然用來作為網盤也可以,不過 10G 就不太夠用了。

要求#

首先需要註冊 Backblaze B2 和 Cloudflare 的帳號,其次需要一個域名,現在 Cloudflare 就提供域名購買,也可以從 namesilo 或者其他地方購買後給 Cloudflare 解析。Backblaze 註冊之後需要進行郵箱驗證,不然無法創建公開儲存桶。

創建儲存桶#

進入 Backblaze 的用戶管理界面,選擇 B2 雲儲存下面的桶選項,然後點擊創建儲存桶,創建時需要輸入桶的名稱,這個名稱會包含在 URL 中,所以不能與其他人的桶活著自己的其他桶有同樣的名字。創建時需要選中公眾選項,將其設置為公開的,其他選項不需要修改。

在創建完成後可以在裡面上傳一張圖片,點擊上傳後的圖片,其中友好 URL 就是要使用的地址,接下來記錄下友好 URL 的主機名,例如f00x.backblaze2.com

剛創建的儲存桶默認不會被 Cloudflare 緩存,而是每次都要回源,對於圖床來說,緩存下來才更方便。點擊桶選項,回到剛才創建儲存桶的地方,可以看到已經創建好的儲存桶,點擊桶設定,將桶信息修改為{"cache-control":"max-age=43200"},其中max-age=後面的數字為 Cloudflare 的緩存時長,單位為秒。

配置 Cloudflare#

在 Cloudflare 中為圖床要使用的子域名創建一個 CNAME 記錄,將其指向剛才記錄下的主機名 f00x.bckblze2.com,由於要使用 Cloudflare 的 CDN 進行緩存,所以要將代理狀態設置為已代理。

在創建 CNAME 記錄之後,將友好 URL 的主機名換成剛創建的域名就可以訪問文件了。如果測試時 Cloudflare 提示錯誤 522,這是因為 Backblaze 只允許使用 Https 訪問,需要在 Cloudflare 的 SSL/TLS 中改成完全(嚴格)。此外,如果是 Cloudflare 的 Pro 付費用戶的話,還需要關閉自動簽名交換 (SXG),他在速度 - 優化選項中。

直接使用 CNAME 域名修改 URL 的話會暴露儲存桶的名稱,也顯得 URL 十分囉嗦,這時候就需要使用 Cloudflare 的轉換規則來將 URL 縮短。

選擇規則 - 轉換規則,然後點擊創建轉換規則 - 重寫 URL 創建一個重寫 URL 的規則,首先為規則取一個名字。如果使用單獨的子域名作為專用的圖床域名的話,可以直接在字段中選擇主機名,在運算符中選擇等於,然後在值當中輸入子域名。

如果圖床並不是使用專門的子域名,需要點擊編寫表達式,並參照Cloudflare 文檔來編寫如何匹配圖床的 URL 地址。

匹配表達式配置完成後,在下面的重寫 - 路徑中選擇重寫到,在選項中選擇 Dynamic,如果只想在 URL 中刪去/file/儲存桶名稱的話,在後面填寫concat("/file/儲存桶名稱", http.request.uri.path),如果有其他要求,也可以參照上面的 Cloudflare 文檔來修改。設置完成後點擊部署即可啟用該規則。現在輸入https://img.example.com/桶中的文件路徑或是自定義的地址即可加載儲存桶中的圖片。

以下是用這種方式上傳的圖片,另外如果有人認得作者是誰可以在評論裡回復一下。

圖片略...

參考#

Free Image Hosting With Cloudflare Transform Rules and Backblaze B2

Backblaze B2 + Cloudflare CDN 可自定義域名的 10G 高速免費外鏈圖床

Backblaze+CloudFlare 實現 0 成本簡單圖床

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。