Cloudflare Tunnel:零成本給 localhost 一個公網身份
整理版優先睇
Cloudflare Tunnel 係零成本將 localhost 服務暴露到公網嘅最佳方案,免費、無需公網 IP、自帶 HTTPS,臨時演示同長期生產都適用。
呢篇文章係教大家點樣用 Cloudflare Tunnel 嚟解決本地服務冇公網 IP 嘅問題。作者遇到要將本地開發嘅服務分享畀客戶或對接支付回調,發現 Cloudflare Tunnel 最慳事,完全唔使買 VPS 或申請公網 IP。整體結論係:先用 trycloudflare.com 快速試水,再用正式隧道方案長期綁定域名,成個過程免費且自動處理 HTTPS。
臨時方案好簡單,一行命令就得到一個隨機域名,30秒搞掂,但係每次重啟會變,只適合短暫演示。正式方案就需要一個託管喺 Cloudflare 嘅域名,然後 login、create tunnel、route dns、寫 config.yml、啟動 tunnel,就可以將本地服務永久映射到自訂域名。
文章仲列出咗常見錯誤同解決方法,例如 Host 唔 allow、服務冇監聽 0.0.0.0、防火牆擋咗等,跟住做就得。成個方案唔使錢,適合開發者快速 expose 本地服務畀人試用或處理回調。
- Cloudflare Tunnel 免費、無需公網 IP、自帶 HTTPS,係 expose 本地服務嘅首選方案。
- 臨時用途只需一行命令 cloudflared tunnel --url http://localhost:3000,30秒獲得域名,但重啟會變。
- 長期使用需先將域名託管喺 Cloudflare,然後 login、create tunnel、route dns、配置 config.yml 並啟動。
- 常見踩坑包括 Host 阻擋、服務未監聽 0.0.0.0、防火牆未放開端口,各有簡單解法。
- 成個流程唔使 VPS,適合開發調試、對接支付回調等需要固定公網域名嘅場景。
cloudflared
Cloudflare Tunnel 官方客戶端,用嚟建立隧道暴露本地服務
正式隧道設定步驟
1. cloudflared tunnel login 授權域名 2. cloudflared tunnel create <name> 創建隧道 3. cloudflared tunnel route dns <name> <domain> 綁定域名 4. 編輯 ~/.cloudflared/config.yml 設定 ingress 5. cloudflared tunnel run <name> 啟動
點解要用 Cloudflare Tunnel?
如果你喺本地 run 咗個服務,需要分享畀客戶或者對接支付回調,Cloudflare Tunnel 係目前最慳事嘅方案。佢唔單止免費,仲唔需要公網 IP,自帶 HTTPS,完全唔使自己搞證書。
免費、不需要公網 IP、自帶 HTTPS
臨時隧道:30秒快速試水
先安裝官方客戶端 cloudflared。唔同系統嘅安裝方法如下:
- macOS:brew install cloudflared
- Windows:去官方下載頁拎安裝檔
- Linux:wget + dpkg 安裝 .deb
假設本地服務行緊喺 http://localhost:3000,一行命令就得:
cloudflared tunnel --url
http://localhost:3000
輸出會畀你一個臨時域名,例如 https://xxxxx.trycloudflare.com,打開就用到。成個過程 30 秒搞掂,不過缺點係域名每次重啟會變,只適合臨時演示同調試。
30秒
域名每次重啓會變
正式玩法:長期穩定域名
前置條件係你要有一個域名,而且已經託管喺 Cloudflare(即 DNS 用 Cloudflare 解析)。
域名已經託管在 Cloudflare
- 1 登錄授權:cloudflared tunnel login,會自動開瀏覽器揀域名授權。
- 2 創建隧道:cloudflared tunnel create TimeSugar,會生成 Tunnel ID 同憑證文件。記住唔好泄露憑證。
- 3 綁定域名:cloudflared tunnel route dns TimeSugar al.timesugar.com,呢個命令會自動加 CNAME 記錄,唔使自己搞。
- 4 配置 YAML:編輯 ~/.cloudflared/config.yml,設定 ingress 規則,例如將 al.timesugar.com 指向本地嘅 localhost:3008,最後加一條兜底 404。
- 5 啟動隧道:cloudflared tunnel run TimeSugar,見到 Initial protocol quic 就代表連到 Cloudflare 邊緣節點,HTTPS 證書自動簽發,唔使管。
Tunnel ID
CNAME 記錄
兜底 404
tunnel: TimeSugar
credentials-file: /Users/wesley/.cloudflared/xxxxx.json
ingress:
- hostname: al.timesugar.com
service: http://localhost:3008
- service: http_status:404
而家 https://al.timesugar.com 已經映射到本地 localhost:3008,HTTPS 由 Cloudflare 自動簽發,唔使自己搞證書。
自動簽發
開機自動運行同常見踩坑
如果你想隧道開機自動行,macOS 可以用 brew services start cloudflared,Linux 就用 systemctl enable + start。
- macOS:brew services start cloudflared
- Linux:sudo systemctl enable cloudflared && sudo systemctl start cloudflared
以下係幾個常見問題同解決方法:
- 1 Blocked request. This host is not allowed. → 本地服務(Vite、Next.js)默認禁咗未知 Host,要喺 config 加返個 allowedHosts。
- 2 ERR_CONNECTION_REFUSED → 先確認 curl http://localhost:3008 通唔通,本地服務根本冇開。
- 3 localhost 得但公網打唔開 → 服務只監聽 127.0.0.1,要改監聽 0.0.0.0,例如 flask run --host 0.0.0.0。
- 4 Unable to reach the origin service / connection refused → 防火牆擋咗端口,macOS 檢查系統防火牆,Linux 用 ufw allow 放開。
監聽 0.0.0.0
防火牆擋咗端口
如果你喺本地運行咗一個服務,需要分享俾客戶或者其他人,又或者個項目需要對接支付回調,用 1. 安裝 cloudflared先裝官方客戶端: macOSWindows去官方下載頁:Cloudflare Tunnel Downloads Linux2. 臨時公網(先試水,最快上手)假設本地服務行緊喺 輸出會畀你一個臨時域名: 打開就可以訪問,成個過程 30 秒。 缺點:域名每次重啟會變,只適合臨時演示同調試。要長期用,睇下一節。 3. 長期穩定域名(正式玩法)前置條件:你有一個域名,同埋已經託管喺 Cloudflare(即 DNS 用 Cloudflare 解析)。 3.1 登入 Cloudflare會自動打開瀏覽器,畀你揀要授權嘅域名: ![]() 揀好之後返去終端,會提示授權完成。 3.2 建立 Tunnel俾隧道改個名(例如 終端會輸出 Tunnel ID 同憑證檔案路徑: ![]() 憑證檔案係咁樣: 3.3 綁定域名將呢個 Tunnel 關聯到你想要嘅域名: 呢條命令會自動喺 Cloudflare 上面建立對應嘅 CNAME 記錄,唔使手動去後台點: ![]() 3.4 設定 YAML建立設定檔: 寫入內容(注意將 ![]()
3.5 啟動終端會打出連接日誌,見到 ![]() 現在 4. 開機自動啟動(可選)macOS 執行:5. 常見中伏位Q1: 報錯 |
如果你在本地跑了一個服務,需要分享給客戶或者其他人,亦或是項目需要對接支付回調,用 1. 安裝 cloudflared先裝官方客戶端: macOSWindows去官方下載頁:Cloudflare Tunnel Downloads Linux2. 臨時公網(先試水,最快上手)假設本地服務跑在 輸出會給你一個臨時域名: 打開就能訪問,整個過程 30 秒。 缺點:域名每次重啓會變,只適合臨時演示和調試。要長期用,看下一節。 3. 長期穩定域名(正式玩法)前置條件:你有一個域名,並已經託管在 Cloudflare(即 DNS 用 Cloudflare 解析)。 3.1 登錄 Cloudflare會自動打開瀏覽器,讓你選擇要授權的域名: ![]() 選好之後回到終端,會提示授權完成。 3.2 創建 Tunnel給隧道起個名字(比如 終端會輸出 Tunnel ID 和憑證文件路徑: ![]() 憑證文件長這樣: 3.3 綁定域名把這個 Tunnel 關聯到你想用的域名: 這條命令會自動在 Cloudflare 上創建對應的 CNAME 記錄,不用手動去後台點: ![]() 3.4 配置 YAML創建配置文件: 寫入內容(注意把 ![]()
3.5 啓動終端會打出連接日誌,看到 ![]() 現在 4. 開機自動運行(可選)macOS 運行:5. 常見踩坑Q1: 報錯 |




