Imgur 封鎖台灣 IP,我把圖床搬到 Cloudflare R2
上個月中,我在寫部落格時,突然發現圖片上傳失敗,無論怎麼嘗試都無法成功。
我的寫作流程是用 VS Code 的 Markdown Image 外掛,透過鍵盤快捷鍵,直接把圖片傳到 Imgur 上,這個流程已經持續了好幾年,非常方便、順手。
但這次踢到鐵板了。
認真查了一下,才發現原來是 Imgur 大概從 5 月 16 日開始,無預警地封鎖了來自台灣的 IP,不再允許台灣使用者上傳圖片。(所幸已上傳的圖片還是可以看)
PTT 上也有討論。
可以想見,這是多麼大的衝擊!
官方既然沒有給出任何理由,這個舉動(封鎖 IP)又顯然是蓄意的,那我們可以合理推測——短期內恐怕不會恢復正常了。
但我的部落格還是要繼續寫啊!只能乖乖尋找替代方案。
尋找替代方案
Markdown Image 這個外掛其實支援不少圖床服務,其中也包括 AWS S3 或其他相容於 S3 API 的服務。
這讓我想到,可以用 Cloudflare R2 來當圖床(網路上確實有很多人這麼做),畢竟它支援 S3 相容 API,而且最大的優勢是「出口流量」免費,整體成本會比 AWS S3 更低——基本上就是 0。
其他考慮過的選項:GitHub 公開 Repo
除了 R2,我也考慮過其他可能性,其中一個就是直接使用 GitHub 的公開 Repository 來當圖床。
這方法在開發者社群間其實蠻流行的,只要把圖片放進一個公開 Repo,再拿原始連結當作圖床的連結使用。
而且已有許多工具可以自動化(包括上述的 Markdown Image),操作起來頗為簡便,不過畢竟不是 GitHub 官方鼓勵的用途,多少讓人有點不安心。
和 AI 討論了一下這個方案的可行性,結論是:如果 GitHub 政策哪天改了,整個圖床系統可能會瞬間失效,到時候就得從頭來過,光想就覺得頭皮發麻。
相較之下,把 Cloudflare R2 當作圖床,則是一種完全合理且可長期運作的使用情境,因此我最後還是選擇了 R2。
認識 Cloudflare
Cloudflare 是一家美國的網路基礎建設公司,主要提供 CDN(內容傳遞網路)、網站加速、防火牆與 DDoS 防護等服務。
許多網站背後的流量處理,其實都仰賴他們的基礎設施——包括我的 blog。
後來他們推出了一系列開發者導向的服務,像是 Workers、KV、Pages、R2 等,試圖建立一整套雲端應用的堆疊。
我本來就對 Cloudflare 的服務很感興趣,常常聽聞他們家的服務如何「佛心」等等,只是一直苦無實際應用的契機。
這次 Imgur 事件,讓我終於有了理由動手玩看看 R2。
延伸閱讀(Podcast):Ep 46. 你知道『赛博佛祖』Cloudflare 吗?
遷移的大綱與挑戰
這個圖床遷移實際上花了我好一些功夫才完成,其中的細節頗多,無法在本文詳述。
但我們可以簡單講講,讓你有個方向。
一、域名托管
我希望圖片網址是以我自己的網域開頭,而不是 Cloudflare 給的預設網址。這樣網址比較乾淨、也容易管理。
為此,我得先把 DNS 託管給 Cloudflare,接著才能用自定義網域綁定 R2 的 Bucket。
這個部分花了一點時間摸索,好在有 AI,最後順利完成。
如此一來,圖片的網址會長得像這樣:
非常精美!
二、Cache Rule 設定
事情還沒結束。Imgur 本身是一個專業圖床,所以他們對圖片的快取做了非常多優化。
但 Cloudflare R2 是一個通用的「物件儲存」服務,可以用來存放各種資料——不限於圖片。
所以它不會主動幫你把快取設定成「最適合公開分享圖片」的模式。
我們得手動設定快取策略,透過 Cloudflare 的 Cache Rules 來提升圖片的載入速度。
雖然是附加工作(你不做也不影響使用),但這同時讓我更了解 Cloudflare 的服務內容與運作方式。還增進了對 CDN、瀏覽器快取與 Cookie 設定的一些了解。
感覺收獲良多耶XD!
三、Markdown Image 外掛設定
完成前兩步後,你便能透過 Cloudflare 官網的 UI 來上傳圖片並取得網址:
但這樣做非常不方便!
所以我們還要設定 Markdown Image,讓它可以成功支援 R2 上傳。
這過程我進行得不太順利,在 Google + AI 的協作下,花了快兩個小時才成功。(明明應該是很簡單的事😅)
除了用 Markdown Image(限 VS Code),更多人則是選擇 PicGo 這個開源工具來上傳圖片——需要加裝 Cloudflare R2 外掛,這方面的資料就多很多!
但畢竟我是 VS Code 用戶,也用它來寫作,Markdown Image 對我而言,仍是最簡單有效的選擇。
結語:失之東隅,收之桑榆
這次的圖床搬遷,原本只是為了解決一個外部服務封鎖問題。沒想到最後竟發展成一次基礎建設升級。
從依賴 Imgur 這類圖床平台,轉為使用 Cloudflare R2 + 自定義網域,我對 blog 圖片的掌控力更高了,未來也比較不怕平台政策突變造成影響。
R2 作為我接觸 Cloudflare 服務的開端,但不會是最後一步。接下來,我要嘗試他們家的 Pages、Workers、D1 等等。
想想不禁有點小興奮!
這是一種專屬於開發者的愉悅,是知覺與快樂的螺旋❤️