Skip to content

[Linux] 使用 ngrok 搭建臨時的伺服器、並轉發端口

Last Updated on 2022-09-12 by Clay

什麼是 ngrok?它有什麼功能?

ngrok 是一個全球都可以使用的『反向代理』(reverse proxy)工具,它可以把你在任何裝置中運行的網頁服務轉發到一組公開的網址。

簡單來講,ngrok 通常不是用於真正的網站部署、而是快速地讓我們 demo 網站服務的。試想,今天我們的筆電開啟了一個本地端的網頁服務,可能是要給客戶看的,但是我們該怎麼傳送給客戶親自測試呢?

如果使用 ngrok,我們就可以把本地端開啟的服務 port 交給 ngrok 來替我們進行轉發,ngrok 會自動分配一組網址(沒錯,就是最上頭示意圖那邊帶有 ngrok 的網誌)來把我們的 port 公開;客戶只需要在瀏覽器輸入我們透過 ngrok 公開的網址,就能親自測試我們的網頁服務。

那麼以下,就簡單記錄該如何使用 ngrok 吧!


ngrok 下載與使用

ngrok 支援不同的作業系統與安裝方式,具體可參考官方網站:https://ngrok.com/download

大家可以參考官方的指令下載。順帶一提在 Linux(Ubuntu/Debian 等發行版)當中,其實可以透過:

sudo apt install ngrok


如果沒有在 APT 清單裡的話,也可以嘗試使用 snap 下載。

sudo snap install ngrok


之後,可以去 https://dashboard.ngrok.com/get-started/setup 取得自己的 token(如果沒有註冊 ngrok 會員則必須註冊、已註冊可以直接登入)。

接著在終端機中,輸入以下指令:

ngrok config add-authtoken [YOUR_TOKEN]


這是為了讓 ngrok 在啟動代理服務時,能夠識別你的使用者身份。

之後,我們便可以直接使用 ngrok 公開特定的端口(port)了。

ngrok http [PORT]

實際範例

在這裡,我們直接示範一個例子。我在系統的 /tmp 路徑底下建立一個分享的空間,並使用 python 來啟動臨時的伺服器,再透過 ngrok 代理出去,讓其他人可以透過瀏覽器存取我放在那裡的檔案。

mkdir /tmp/share_folder/
cd /tmp/share_folder/
touch sample_01.txt sample_02.txt sample_03.txt
python3 -m http.server 18888


到這裡,我們的臨時伺服器已經搭建好了,可是只有跟我處於同一個網路空間的人才能取得。這時候我們可以開另外一個終端機,再使用 ngrok 代理 18888 這個 port。

ngrok http 18888


Output:

圖片中的 http://99c2-61-222-146-139.jp.ngrok.io 就是我們臨時的網址。我們在瀏覽器中輸入,就可以看見我所公開的臨時伺服器:

當然,ngrok 所產生的這組網址,只要是公共網路就可以存取到,不需要跟我搭建伺服器的裝置位於同一個網路上。所以對很多使用情況來說,ngrok 就是一個可以做到內網穿透的方便工具。

不過理論上,其實只要你有一台固定 IP 的伺服器,你就可以拿它做反向代理。

關於反向代理的方法,我打算日後再另外寫一篇紀錄。


References


Read More

Leave a Reply