在 ServBay 中使用 Cloudflare Tunnel 安全公開本地服務指南
Cloudflare Tunnel(前稱 Argo Tunnel)是 Cloudflare 提供的零信任網路服務,讓您無需開放公網端口或複雜設定防火牆規則,也能安全地將本地運行的 Web 服務、SSH 或其他應用公開到網際網路上。本指南將詳細說明如何在強大易用的本地 Web 開發環境 ServBay 中,利用 cloudflared
客戶端工具建立安全隧道,實現互聯網上訪問您本地的 ServBay 服務。
主要優勢:
- 強化安全性: 借助 Cloudflare 全球網絡的安全防護能力,包括 DDoS 防禦、WAF(Web 應用防火牆)等。
- 簡化網路設定: 不用再煩惱端口轉發、NAT 或防火牆設定。
- 零信任架構: 連線採主動外發,攻擊面降到最低。
- 整合 Cloudflare 特色功能: 包含快取、優化、分析等服務輕鬆上手。
概述
ServBay 為開發者提供一個整合且易於管理的本地開發環境,支援多種語言(PHP、Node.js、Python、Go、Java、Ruby、Rust 等)、資料庫(MySQL、PostgreSQL、MongoDB、Redis 等)與 Web 伺服器(Caddy、Nginx、Apache)。平常您在 ServBay 開發的網站或應用只能本地存取,透過結合 Cloudflare Tunnel,不僅能方便與團隊分享開發進度,還可根據需求將本地服務臨時或長期公開給外部用戶,並同時享有 Cloudflare 帶來的安全性與效能提升。
技術原理
Cloudflare Tunnel 的核心原理,是在您的本地網路環境(運行 ServBay 的機器)上啟動 cloudflared
客戶端,主動向最近的 Cloudflare 邊緣節點發起一個或多個加密連線(採用 QUIC 協定)。這些連線屬於外發類型,因此不需在路由器或防火牆上增加任何對外入站規則。當外部用戶透過與隧道綁定的網域名稱訪問服務時,流量將先進入 Cloudflare 邊緣,經既有安全隧道轉發給本地 cloudflared
客戶端,最後由 cloudflared
將請求送至您在 ServBay 上運行的本地服務(例如 https://servbay.local
或 http://localhost:8000
的網站)。回覆流程亦會原路返回。
環境準備
開始設定前,請確認下列條件皆已滿足:
- 已安裝且正常運作的 ServBay: 您的 ServBay 環境已建置完成,並且欲公開的本地網站或服務確實運行於 ServBay。例如 ServBay 預設的本地域名
servbay.local
對應網站可正常存取。 - Cloudflare 帳號: 您擁有一組 Cloudflare 登入帳戶。
- 已加至 Cloudflare 的網域名稱: 您已將網域新增到 Cloudflare 帳號並交由 Cloudflare DNS 管理。
- 已安裝
cloudflared
客戶端: 您需在運行 ServBay 的 macOS 電腦上安裝cloudflared
命令列工具。
1. 安裝 cloudflared
客戶端
對於 macOS 系統,建議透過 Homebrew 進行安裝。若尚未安裝 Homebrew,請參考官方文件先行完成安裝。
使用 Homebrew 安裝(推薦):
brew update
brew install cloudflared
2
手動下載安裝(適用於 macOS ARM 架構):
# 下載 macOS ARM (Apple Silicon) 版本二進位檔
curl -L https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-darwin-arm64.tgz | tar xz
# 移動下載的二進位檔至系統 PATH 目錄
sudo mv cloudflared /usr/local/bin/
2
3
4
驗證安裝: 安裝完成後,請透過以下指令檢查 cloudflared
是否安裝成功並查看版本:
cloudflared --version
# 範例輸出:cloudflared version 2024.5.0 (built 2024-05-01)
2
實際版本號可能有所不同,只要能看到版本資訊即代表安裝成功。
2. 登入 Cloudflare 帳號
在終端機執行以下指令進行 Cloudflare 帳號授權:
cloudflared tunnel login
執行完畢後,cloudflared
會自動開啟瀏覽器跳轉至 Cloudflare 登入授權頁面。請選擇您的網域所屬 Cloudflare 帳戶並授權 cloudflared
存取。授權成功後,瀏覽器會顯示成功提示,且終端機亦會出現授權完成訊息,並於預設組態目錄(常見為 ~/.cloudflared/
)下生成 cert.pem
文件。
隧道設定實戰
接下來我們將建立新的隧道,並設定流量導向 ServBay 上運行的本地服務。
主要設定流程
建立隧道
在終端機中執行指令以建立新隧道。您可自訂易識別的隧道名稱,例如
servbay-demo-tunnel
。bashcloudflared tunnel create servbay-demo-tunnel
1執行成功後將顯示隧道 ID(UUID)以及
credentials-file
的路徑。請記下隧道 ID(如a7b8c9d0-e1f2-3a4b-5c6d-7e8f9a0b1c2d
)。此命令會於~/.cloudflared/
產生 JSON 憑證檔(例如a7b8c9d0-e1f2-3a4b-5c6d-7e8f9a0b1c2d.json
),內含啟動隧道所需認證資訊,請妥善保管!設定 DNS 紀錄
為便於 Cloudflare 將指定網域流量導入您的隧道,需要在 Cloudflare DNS 中建立 CNAME 紀錄。可利用
cloudflared
指令快速設定:bashcloudflared tunnel route dns servbay-demo-tunnel servbay-demo.yourdomain.com
1將
servbay-demo-tunnel
替換為您的隧道名稱,servbay-demo.yourdomain.com
更換為您準備給外部存取本地服務的子網域(並確認yourdomain.com
為託管於 Cloudflare 的網域)。執行完畢,
cloudflared
會自動在 Cloudflare DNS 為servbay-demo.yourdomain.com
增加 CNAME 紀錄,指向<隧道ID>.cfargotunnel.com
。編輯設定檔
cloudflared
需以 YAML 格式的設定檔定義隧道行為,包括哪些本地服務要曝光、各自對應哪個網域。預設設定檔路徑為~/.cloudflared/config.yml
,不存在時請自行建立。編輯
~/.cloudflared/config.yml
,示例如下:yaml# tunnel: 隧道 UUID,需替換為您建立時取得的 ID tunnel: a7b8c9d0-e1f2-3a4b-5c6d-7e8f9a0b1c2d # credentials-file: 隧道憑證檔路徑,通常位於 ~/.cloudflared/ 下,以 UUID 命名 credentials-file: /Users/yourusername/.cloudflared/a7b8c9d0-e1f2-3a4b-5c6d-7e8f9a0b1c2d.json # 請替換您的帳號與實際路徑 ingress: # 匹配進入隧道的請求規則 - hostname: servbay-demo.yourdomain.com # 對外連線網域,需與您設定的 DNS 記錄一致 service: https://servbay.local # 本地 ServBay 服務的位址。ServBay 預設提供 servbay.local 並已設置 SSL。 originRequest: # noTLSVerify: true # 若本地服務採用自簽憑證(如 ServBay User CA 生成),開啟此項以略過 TLS 驗證 # 若 ServBay 網站已設有效證書(如使用 ACME 整合 Let's Encrypt 申請),則不需設定。 # 通常為簡化開發,本地證書搭配 noTLSVerify: true 是常見做法。 - service: http_status:404 # 預設回退規則,當無 hostname 匹配時回傳 404
1
2
3
4
5
6
7
8
9
10
11
12
13
14重要提醒:
- 請對
tunnel
與credentials-file
填寫實際 UUID 與憑證檔路徑 hostname
請填入第二步裡您設定的子網域service: https://servbay.local
指向 ServBay 預設網站的 HTTPS 位址。ServBay 會設定servbay.local
且使用其 User CA 發放本地受信的 SSL 證書,cloudflared
也會將流量轉發至此本地位址。若您的本地服務運作於其它位置(例如 Node.js 在http://localhost:3000
),請相應更改service
配置。originRequest.noTLSVerify: true
讓cloudflared
忽略本地服務的 SSL 憑證驗證,若採用自簽證書(如 ServBay User CA)則必須開啟,否則憑證驗證失敗將導致連線問題。若 ServBay 採用有效(系統信任)的證書(例如 ACME 申請的 Let's Encrypt),則可不用設定這一項。
- 請對
啟動隧道服務
完成設定檔後,即可啟動 cloudflared
隧道服務。在終端機輸入:
cloudflared tunnel run servbay-demo-tunnel
請用您實際創建的隧道名稱取代 servbay-demo-tunnel
。
cloudflared
將連線上 Cloudflare 網絡並建立隧道。終端頁面會顯示連線狀態和日誌,只要此指令於前台執行,隧道便會持續運作。如需讓隧道於後台常駐,可考慮設為系統服務(視作業系統與個人偏好,可用如 macOS 上的 launchctl
等方式,相關細節不屬於本文範疇)。
驗證服務
隧道成功啟動後,您即可從外部網路透過事先設定的網域名稱存取本地 ServBay 服務。
瀏覽設定網域: 請於瀏覽器輸入(如第二步設定):
https://servbay-demo.yourdomain.com
驗證重點:
- 網頁須正確載入,且顯示內容與於本地連線
https://servbay.local
一致。 - 檢查網址列,憑證須顯示有效,證書簽發自 Cloudflare(非本地 ServBay 憑證,本地 SSL 祇供
cloudflared
到 ServBay 溝通)。 - 可用開發者工具檢查 HTTP 回應標頭,理應能看到
CF-RAY
等 Cloudflare 相關標記,證明流量已經過 Cloudflare。
- 網頁須正確載入,且顯示內容與於本地連線
進階設定技巧
多服務路由
在 config.yml
的 ingress
段落,可以根據不同 hostname
將流量路由到不同本地服務(如不同網站或 API)。
ingress:
- hostname: api.yourdomain.com
service: http://localhost:8080 # 假設 API 服務於本地 8080 埠運作
- hostname: app.yourdomain.com
service: https://servbay.local # 主網站
- service: http_status:404
2
3
4
5
6
流量監控與日誌
cloudflared
提供多種工具助您監控與除錯隧道服務:
- 即時顯示指標:bash
cloudflared tunnel info servbay-demo-tunnel
1 - 讀取詳細日誌:
cloudflared tunnel run
會於終端直接輸出日誌內容。亦可自訂日誌等級或導向特定檔案。
整合 Cloudflare Access
若需進一步強化安全性,可結合 Cloudflare Access,為透過隧道公開的服務增加身份驗證與授權。Cloudflare Access 屬於 Cloudflare Zero Trust 平台,可實現比傳統 VPN 更細緻彈性的存取控制,相關設定通常於 Cloudflare 後台進行。
疑難排解
配置或使用過程中若有疑問,可參考下方常見現象與解法:
現象 | 解決方案 |
---|---|
造訪網域顯示 502 Bad Gateway | 檢查本地 ServBay 服務是否正常(如本機瀏覽連線 https://servbay.local 或您設定的其他本地位址)。檢查 config.yml 之 service 配置位址與埠號正確無誤。如本地採 HTTPS 且未啟用 noTLSVerify: true ,請確認憑證有效或考慮啟用該選項。 |
DNS 解析錯誤,無法訪問網域 | 確認 Cloudflare DNS 已新增正確 CNAME 記錄,指向 <隧道ID>.cfargotunnel.com 。可用 dig 或 nslookup 檢查 DNS 解析。 |
憑證錯誤 | 若為 Cloudflare 簽發憑證出錯,請檢查 config.yml 之 hostname 是否與訪問網域一致。若為 cloudflared 連線本地服務時 TLS 出錯,請確認 service 位址正確,並在需要時啟用 originRequest.noTLSVerify: true 。 |
cloudflared tunnel run 命令錯誤 | 檢查 ~/.cloudflared/config.yml 是否存在且 YAML 格式正確。檢查 tunnel 與 credentials-file 的 UUID 及檔案路徑無誤。確認 cloudflared 具權限存取憑證與設定檔。 |
連線慢或不穩定 | 檢查本地網路連線品質。 Cloudflare Tunnel 利用 QUIC 協定,請確認網路環境是否支持。 也可根據需求調整 Cloudflare 節點區域或諮詢官方支援。 |
優勢小結
在 ServBay 中結合 Cloudflare Tunnel,開發者可:
- 安全展示本地成果: 輕鬆向客戶或團隊展示本地正在開發的網站或應用。
- 進行外部回呼測試: 測試各種需公網可訪問的回調(Webhook)服務。
- 享有企業級資安防護: 獲得 Cloudflare 的 DDoS、防火牆等保護,阻擋惡意攻擊。
- 簡化網路設定: 從此不用煩惱複雜的端口轉發及防火牆配置。
- 善用 Cloudflare 全球網路: Anycast 加速網速與穩定性,全球隨時快速連線。
ServBay 提供強大本地開發平台,結合 Cloudflare Tunnel 的安全公開能力,為開發者打造高效與安全兼具的最佳工作流程。
結論
本文完整說明了如何在 ServBay 環境下安裝及設定 cloudflared
,創建並啟動 Cloudflare Tunnel,將本地 Web 服務安全地公開到互聯網。照著本指南操作,您即可充份發揮 ServBay 多技術棧支援及 Cloudflare Tunnel 的安全優勢,大幅提升開發協作效率。請謹記,Cloudflare Tunnel 是 Cloudflare Zero Trust 平台的一部分,建議深入探索 Cloudflare Access 等進階功能,達到更完善的存取控制與安全需求。