使用ngrok暴露埠到外網,並且提供域名訪問應用
Ngrok 是什麼
ngrok 是一個反向代理,通過在公共的端點和本地執行的 Web 伺服器之間建立一個安全的通道。ngrok 可捕獲和分析所有通道上的流量,便於後期分析和重放。
網路架構如下圖所示:
介紹和圖片來自: http://www.oschina.net/p/ngrok
可以用來幹什麼
其中應用場景最多的是內網穿透, 把區域網內的一些服務暴露到公網.
例如支付對接的非同步通知, 微信開發者模式測試等.
ngrok
執行時需要先連線到伺服器, 指定或隨機分配一個子域名, 公用就能通過這個子域名訪問到你的機器上的服務.
例如: 命令列執行 ngrok -subdomain=fengqi 80
fengqi.ngrok.com
資料的來源就是我本地的80埠.而且客戶端有回放功能, 在做測試時就可以不用重複發起請求,
ngrok
就能模擬了, 測試表單, ajax 非常方便, 同時可以很直觀的看到 http
請求資訊.
測試一下
ngrok 客戶端執行後, 命令列會顯示一些資訊, 同時會監聽本地 Web 4040 埠.
在瀏覽器中開啟後提示你需要訪問的域名, 如下.
這裡我沒有指定, 直接執行 ngrok 80
就隨機分配了一個.
當訪問這個域名時, 和在你本地訪問80埠是一樣的內容, 而且客戶端會顯示訪問的詳細資訊.
點選 replay
時, 可以看到和一次普通請求一樣, 但是 ip 變掉了.
另外這裡的域名不是官方的 ngrok.com
是因為用了我自己搭建伺服器, 因為大陸網友使用官方有些困難.
如果你也想使用我的伺服器測試, 在 ~/.ngrok
中輸入以下內容:
Windows 是在使用者跟目錄下, 如
C:\Users\fengqi\.ngrok
server_addr: "ngrok.fengqi.me:4443"
trust_host_root_certs: true
下載安裝並信任我的跟證書, Fengqi Global CA
Windows 安裝方法
蘋果安裝方法
ngrok 詳細用法
用法不復雜, 執行下 ngrok -h
就能看到, 內容有點多, 這裡就不貼出來了.
簡單抽幾個:
-
轉發本地的 80 埠到外網:
ngrok 80
-
指定一個子域名:
ngrok -subdomain=test 80
, 訪問需要就是:test.ngrok.fengqi.me
, 如果已經被佔用, 需要換一個. -
tcp 埠轉發:
ngrok -proto=tcp 22
, 會隨機分配一個埠, 對應到你本地 22 埠.
如果你是 linux, 那麼別人就可以 ssh 到你的機器了, 類似這樣: tcp://ngrok.fengqi.me:43797 -> 127.0.0.1:22
不過我自己搭建的伺服器沒有實現埠轉發, 因為我需要留著這些埠, 畢竟跑著很多東西呢. -
設定 http basic 驗證:
ngrok -httpauth="user:password" 80
這樣就安全很多, 防止別人猜到/碰巧訪問到你這裡去. -
直接指定一個域名, 而不是子域名:
ngrok -hostname="example.com" 80
, 這個我也沒有實現, 因為需要我預設接受全部的域名繫結, 目前還不想這樣.
如果你也想搭建自己的伺服器
官方只開源了 1.x
的程式碼, 所以如果使用我的或你自己搭建伺服器需要下載 1.x
的客戶端.