在 ServBay 中使用 Pinggy 實現本地網站與服務的公網訪問
Pinggy 是一款極為簡單易用的內網穿透工具,透過反向代理技術,能將您在本地(如 ServBay 環境)運行的 Web 服務安全地暴露到公網。本指南將詳盡介紹如何在 ServBay 環境下運用 Pinggy,協助開發者快速讓本地 Web 服務可被互聯網訪問,便於遠端展示、團隊協作或接收 Webhook 請求等需求。
技術原理
Pinggy 的核心在於建立一條安全的 SSH 隧道。它會將您的本地服務端口(可能在 NAT 或防火牆之後)透過 SSH 連接,轉發到 Pinggy 的公網伺服器上。當公網用戶訪問 Pinggy 指派的 URL 時,請求會透過此隧道安全傳遞至您的本地服務。
在 ServBay 應用場景中,這代表您可透過 Pinggy,將 ServBay 中運行的某個本地網站(如:https://myproject.servbay.demo
)對應到公網 URL,無須複雜的埠映射或防火牆設置。
環境準備
使用 Pinggy 無需在本地安裝任何額外客戶端軟體。您只需:
- 已安裝並運行 ServBay: 確認您的 ServBay 環境已正確安裝,且欲暴露的本地網站或服務正運作中。
- 一個運行中的 ServBay 網站: 請於 ServBay 中設定並啟動一個或多個本地網站。這些網站通常會透過 ServBay 內建的 Caddy 或 Nginx 伺服器,監聽本地 80 (HTTP) 或 443 (HTTPS) 埠。
- 支援 SSH 的終端機: macOS 原生終端或其他終端模擬器皆支援 SSH。
- 基礎 SSH 操作知識: 理解如何在終端機中執行 SSH 指令。
隧道設置實戰
核心指令
使用 Pinggy 建立隧道相當容易,只需在終端機執行一條 SSH 指令。以下範例展示如何將 ServBay 中用本地 443 埠訪問的 servbay.new
網站映射至公網:
ssh -p 443 -R0:localhost:443 -o StrictHostKeyChecking=no -o ServerAliveInterval=30 -t [email protected] x:localServerTls:servbay.new "u:host:servbay.new"
重要提醒: 上述指令中的 XXXXXXXXXXX
請替換為您於 Pinggy 網站取得的用戶名稱(通常是一組字符)。servbay.new
應替換為您欲經 Pinggy 映射至公網的本地網站域名(例如:myproject.servbay.demo
)。
以下詳細解釋該指令的主要參數:
參數組件 | 功能說明 |
---|---|
-p 443 | 指定 SSH 連線至 Pinggy 伺服器的埠為 443,利用 HTTPS 預設埠以提高穿透防火牆的成功率。 |
-R0:localhost:443 | 遠端埠轉發的核心。0 代表讓 Pinggy 自動分配一個隨機公網埠;localhost:443 則將公網流量轉發至本機 443 埠。ServBay 的 Caddy 或 Nginx 通常監聽該埠處理 HTTPS 請求。 |
-o StrictHostKeyChecking=no | 關閉 SSH 主機金鑰檢查。首連或測試方便,但長期或正式環境建議啟用主機金鑰驗證。 |
-o ServerAliveInterval=30 | 每 30 秒傳送 keep-alive 訊號,預防 SSH 因閒置遭斷線。 |
-t [email protected] | Pinggy 用戶名稱及伺服器位址。XXXXXXXXXXX 為您的 Pinggy 用戶名稱。 |
x:localServerTls:servbay.new | Pinggy 自訂參數,通知 Pinggy 您的本地服務支援 TLS (HTTPS),域名為 servbay.new (請換成自家 ServBay 網站域名)。協助 Pinggy 正確處理 HTTPS 連線。 |
"u:host:servbay.new" | 另一個 Pinggy 自訂參數,用來重設轉發請求的 HTTP Host 標頭。將傳入請求的 Host 強制設為 servbay.new (請依實際網站域名調整)。這對於 ServBay 採多站台(虛擬主機)情境極為重要,能明確指定需響應的本地網站。 |
成功執行後,Pinggy 會於終端顯示種公網 URL,一般提供 HTTP 與 HTTPS 位址,如:
http://rnirh-172-188-50-148.a.free.pinggy.link
https://rnirh-172-188-50-148.a.free.pinggy.link
2
服務驗證
隧道建好後,可透過下列方式驗證公網訪問是否可用:
用
curl
測試(推薦): 使用curl -I
(僅獲取回應標頭)測試公網 URL。請將範例 URL 替換為實際 Pinggy 輸出的 URL。bashcurl -I https://rnirh-172-188-50-148.a.free.pinggy.link
1若一切正常,會看到類似如下的 HTTP 標頭,含本地 Web 伺服器(如 Nginx 或 Caddy)的回應資訊:
HTTP/1.1 200 OK Connection: close Access-Control-Allow-Credentials: true Access-Control-Allow-Headers: Content-Type, Authorization Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS Access-Control-Allow-Origin: * Cache-Control: max-age=0, must-revalidate, no-cache, no-store, private Connection: keep-alive Content-Type: text/html; charset=UTF-8 Date: Tue, 18 Feb 2025 11:51:48 GMT # 日期可能不同 Expires: Sun, 02 Jan 1990 00:00:00 GMT Pragma: no-cache Server: nginx # 或 caddy 等,視您的 ServBay 設定 Vary: Accept-Encoding X-Frame-Options: SAMEORIGIN X-Powered-By: PHP/8.4.3 # 或其他技術資訊
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16看到
HTTP/1.1 200 OK
狀態碼與正確的Server
標頭,代表連線成功且已由本地 ServBay Web 伺服器響應。瀏覽器訪問: 於任何裝置(非本地網路亦可)的瀏覽器開啟 Pinggy 提供的 HTTPS 網址(如
https://rnirh-172-188-50-148.a.free.pinggy.link
),內容應與本地由 ServBay 訪問時一致。預期結果:
- 公網用戶可經 Pinggy 提供的 URL 訪問本地 ServBay 網站或服務。
- 若本地服務啟用 HTTPS(ServBay 預設為本地網站產生自簽名憑證),Pinggy 亦會自動支援 HTTPS 公網訪問,並提供免費公有 CA 簽發憑證,無須額外設置。
- 響應時間與穩定性取決於本地網路、至 Pinggy 伺服器的網路品質、以及 Pinggy 服務負載。
進階技巧
映射不同本地埠或服務: 若本地為非 Web 服務,或 Web 監聽埠非 80/443,可調整
-R
參數。例如欲暴露本地 8000 埠(如 Python/Node.js 應用):bashssh -p 443 -R0:localhost:8000 -o StrictHostKeyChecking=no -o ServerAliveInterval=30 -t [email protected]
1注意,對於非 Web 服務或不處理
Host
標頭的 Web 服務,x:localServerTls
和u:host
參數可省略。自訂網域名稱(Pinggy Pro): Pinggy Pro 用戶可使用專屬自訂網域,取代 Pinggy 分配的隨機子網域,提供更專業的連線位址。詳細設定請參見 Pinggy 官方文件。
隧道常駐(利用
autossh
): SSH 連線可能因網絡波動而中斷。如需長時維持隧道,建議用autossh
工具監控並自動重連。安裝(如 macOS 用 Homebrew:brew install autossh
)後可這樣用:bashautossh -M 0 -t "ssh -p 443 -R0:localhost:443 -o StrictHostKeyChecking=no -o ServerAliveInterval=30 -t [email protected] x:localServerTls:servbay.new \"u:host:servbay.new\""
1-M 0
代表不額外監控埠,直接仰賴 SSH 的 keep-alive (ServerAliveInterval
) 機制。免 Token 指令: Pinggy 支援一次性、無需在命令中暴露用戶名/Token 的指令,直接於網站取得臨時指令即可。適合分享給他人時避免 Token 洩漏風險。
常見應用場景
- 遠端展示: 向客戶或團隊成員演示於本地 ServBay 環境開發的網站或應用,無須佈署至測試或正式環境。
- Webhook 除錯: 直接於本地環境接受第三方服務(如支付、GitHub)發來的 Webhook,輕鬆調試。
- 跨裝置測試: 測試本地網站在行動裝置或平板等多端上的響應式與相容性,即使裝置不在同一區網亦可。
- 團隊協作: 方便團隊成員互訪及測試各自於本地 ServBay 運行的服務。
疑難排解
現象 | 解決方式 |
---|---|
SSH 連線逾時或失敗 | 檢查您的網路連線,確認可訪問 a.pinggy.io 。並檢查本機防火牆是否阻擋 443 埠對外。確認 Pinggy 用戶名稱正確。 |
Pinggy 發的 URL 無法訪問或出錯(如 502 Bad Gateway) | 檢查 ServBay 啟動的本地網站或服務是否運行中,並正監聽於 localhost:443 (或您 -R 參數指定的埠)。確認 ServBay 的 Web 伺服器(Caddy/Nginx)設定無誤。 |
訪問 Pinggy URL 出現 404 或 ServBay 預設頁 | 多站台(虛擬主機)時,請務必檢查 SSH 命令的 x:localServerTls 與 u:host 是否正確指定欲公開的本地網站域名(如 myproject.servbay.demo )。這是讓 ServBay Web 伺服器知道該回應哪個虛擬主機的關鍵。 |
隨機中斷 | 可能因網路不穩定或 SSH 逾時。可調高 ServerAliveInterval ,或用 autossh 自動保持連接(參見「進階技巧」)。 |
HTTPS 憑證出錯 | Pinggy 大多為免費用戶提供公有 CA 憑證。如本地用自簽憑證,瀏覽器或示警。Pinggy 提供的公有 CA 憑證可解決公網訪問時的警告。若仍有問題,請確認 ServBay 對外服務確實採用 HTTPS(監聽 443 埠)。 |
方案總結
運用 Pinggy,ServBay 用戶可極為簡單快捷地開設安全的公網通道,讓本地開發網站與應用對外發佈。此方案有以下明顯優勢:
- 無需安裝客戶端: 配置使用步驟簡化。
- 一指令啟動: 只需一條 SSH 指令,即刻開通隧道。
- 自動支援 HTTPS: Pinggy 提供免費公有 CA 憑證,解決 HTTPS 憑證困擾。
- 支援 HTTP 及 TCP 隧道: 滿足多種服務對外需求。
- 高度適配 ServBay: 配合正確
Host
設置,輕鬆公開 ServBay 之多站台配置。 - 免 Token 選項: 分享指令更安全。
相比須安裝繁雜客戶端或配置檔的內網穿透工具,Pinggy 更為輕便易用,非常適用於 ServBay 開發者的臨時測試、展示與快速共享。若有長時間運作或自訂網域的商務需求,亦可考慮 Pinggy 的付費方案。ServBay 的強大本地開發環境配搭 Pinggy 的便利公網映射功能,將大幅提升您的開發與協作效率。