1. 程式人生 > >使用ngrok暴露埠到外網,並且提供域名訪問應用

使用ngrok暴露埠到外網,並且提供域名訪問應用

Ngrok 是什麼

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

網路架構如下圖所示:

24201429_lLUH.jpg

介紹和圖片來自: http://www.oschina.net/p/ngrok

可以用來幹什麼

其中應用場景最多的是內網穿透, 把區域網內的一些服務暴露到公網.
例如支付對接的非同步通知, 微信開發者模式測試等.

ngrok 執行時需要先連線到伺服器, 指定或隨機分配一個子域名, 公用就能通過這個子域名訪問到你的機器上的服務.
例如: 命令列執行 ngrok -subdomain=fengqi 80

, 這是訪問 fengqi.ngrok.com 資料的來源就是我本地的80埠.
而且客戶端有回放功能, 在做測試時就可以不用重複發起請求, ngrok 就能模擬了, 測試表單, ajax 非常方便, 同時可以很直觀的看到 http 請求資訊.

測試一下

ngrok 客戶端執行後, 命令列會顯示一些資訊, 同時會監聽本地 Web 4040 埠.
在瀏覽器中開啟後提示你需要訪問的域名, 如下.
QQ20150906-1@2x.png

這裡我沒有指定, 直接執行 ngrok 80 就隨機分配了一個.
QQ20150906-6@2x.png

當訪問這個域名時, 和在你本地訪問80埠是一樣的內容, 而且客戶端會顯示訪問的詳細資訊.
QQ20150906-2@2x.png
QQ20150906-3@2x.png
QQ20150906-4@2x.png

點選 replay 時, 可以看到和一次普通請求一樣, 但是 ip 變掉了.
QQ20150906-5@2x.png

另外這裡的域名不是官方的 ngrok.com 是因為用了我自己搭建伺服器, 因為大陸網友使用官方有些困難.

如果你也想使用我的伺服器測試, 在 ~/.ngrok 中輸入以下內容:

Windows 是在使用者跟目錄下, 如 C:\Users\fengqi\.ngrok

server_addr: "ngrok.fengqi.me:4443"
trust_host_root_certs: true

下載安裝並信任我的跟證書, Fengqi Global CA
Windows 安裝方法
QQ20150908-1@2x.png

蘋果安裝方法
QQ20150908-2@2x.png

ngrok 詳細用法

用法不復雜, 執行下 ngrok -h 就能看到, 內容有點多, 這裡就不貼出來了.

簡單抽幾個:

  1. 轉發本地的 80 埠到外網: ngrok 80

  2. 指定一個子域名: ngrok -subdomain=test 80, 訪問需要就是: test.ngrok.fengqi.me, 如果已經被佔用, 需要換一個.

  3. tcp 埠轉發: ngrok -proto=tcp 22, 會隨機分配一個埠, 對應到你本地 22 埠.
    如果你是 linux, 那麼別人就可以 ssh 到你的機器了, 類似這樣: tcp://ngrok.fengqi.me:43797 -> 127.0.0.1:22
    不過我自己搭建的伺服器沒有實現埠轉發, 因為我需要留著這些埠, 畢竟跑著很多東西呢.

  4. 設定 http basic 驗證: ngrok -httpauth="user:password" 80 這樣就安全很多, 防止別人猜到/碰巧訪問到你這裡去.

  5. 直接指定一個域名, 而不是子域名: ngrok -hostname="example.com" 80, 這個我也沒有實現, 因為需要我預設接受全部的域名繫結, 目前還不想這樣.

如果你也想搭建自己的伺服器

官方只開源了 1.x 的程式碼, 所以如果使用我的或你自己搭建伺服器需要下載 1.x 的客戶端.