BACK
Featured image of post 透過 ngrok 產生臨時用的網址到指定機器

透過 ngrok 產生臨時用的網址到指定機器

ngrok 是一個反向代理,通過在公共的端點和本地運行的 Web 伺服器之間建立一個安全的通道。ngrok 可捕獲和分析所有通道上的流量,便於後期分析和重放。

參考文章


前言

  • 在開發的過程中,有時候會需要從另外一臺機器測試在local的網站及服務。最常見的情況就是當要測試網站在手機上看起來長什麽樣子的時候,或者有時候要讓別人連到自己local的sql serer的時候。
  • ngrok 就是讓這一切變得容易的工具,而且很佛心的是,免費版就夠一般使用。

特性

  • 綁定本機的埠號並接受外部連入。
  • 可穿透 NAT 或防火牆讓外部連入。
  • 會拿到一個 ngork 的網址方便貼到信件或訊息內。
  • ngrok 產生的網址支援 HTTP / HTTPS。
  • 有 web 界面讓我們可以監看連入的請求內容。
  • 可加設 HTTP 帳密認證,避免被不必要的人亂連。
  • 除了支援 HTTP 外,也支援 WebSocket 和 SSH。
  • 可同時發布多個服務。
  • 還支援 API,可以用 API 操控 ngork。
  • 付費方案可以自定網址。

運作模式

  • ngrok 就是一個 reverse proxy 的工具,透過把 local 的 port map 到一個 public 的地址,讓外部能夠透過這個 public 地址連到,然後工具用 reverse proxy 和 local 實際的 port 取得資料。

  • 因此有個缺點,就是速度相對較慢,尤其是 ngrok 的伺服器在美國因此也會減少一些速度。不過如果是爲了開發測試用,這個就不算缺點。
  • ngrok 免費版本提供了一個動態的地址,需要進階功能或者同時map多個服務就需要付費。

其實 ngrok 並未真正的穿透 NAT,它只是接受 ngork cloud 機台轉發來的請求並做出回應,而那個 ngrok 的網址其實也就是連到 ngrok cloud 的網址。


安裝與使用

需先安裝 unzip (解壓縮用)

1
yum install zip unzip

步驟 1 - 到官網下載相對應系統的 ngrok 安裝包

1
2
### 以 linux 64 為例
wget https://bin.equinox.io/c/4VmDzA7iaHb/ngrok-stable-linux-amd64.zip

步驟 2 - 解壓縮安裝包並搬移到 /usr/bin/

1
unzip ngrok-stable-linux-amd64.zip
1
mv ngrok /usr/bin/.

步驟 3 - 到 ngrok 官網註冊一個免費帳號

步驟 4 - 將 dashboard 上顯示的 token 設定至本機

1
ngrok authtoken XXXXXXXXXXXXXXXX
顯示此畫面代表已設定完成。

步驟 5 - 假設服務跑在本機的 port 3000,則執行以下指令

1
ngrok http 3000
顯示此畫面代表已成功跑起服務,打開網址即可。

直到 ngrok 關掉或 ngrok session 過期之前,這兩個 URL 都可以被公開存取。

進階使用

外連的 web 服務加密

  • 有時候給別人測試的鏈接不希望任意的人都能夠開啓,ngrok非常貼心的提供了這個服務。
  • 只需要在 mapping 的時候加上 auth 這個參數就可以設定密碼保護。例如:
1
ngrok http --auth=admin:12345 3000
意思是,賬號要是admin,而密碼是12345 map 到 3000 port。

重寫 hostname

  • 有些服務會使用到 hostname 的值,這個時候重寫 hostname 的功能就變得很重要。可以使用 host-header 做設定。
這邊的例子用的是在 IIS 裏面設定只有 test.com 才會 binding 到 80 port,使用的指令就是:
1
ngrok http --host-header=test.com 80


Licensed under CC BY-NC-SA 4.0
comments powered by Disqus