使用ngrok讓你的本地Web程序外網可訪問

注:本文隸屬於《Flask Web開發實戰》番外文章系列,文章列表見《Flask Web開發實戰番外文章索引》python

在開發Web程序時,有時候會有這樣的需求:web

  • 讓朋友能夠訪問到你本地運行的程序
  • 在本地測試各種服務(好比Telegram機器人、微信公衆號等)
  • 有一臺廢棄的電腦,你想讓它做爲一臺服務器來運行你的博客程序,或是運行其餘簡單的程序

外網可見

要實現上面的需求,咱們就須要程序可以「外網可見」。在《Flask Web開發實戰》第一章介紹啓動程序時,咱們說起了「外網可見」的內容。簡單來講,當你將Flask服務器監聽的主機地址設置爲0.0.0.0時,就可讓服務器外網可見。不過,這裏有一個前提,那就是你的服務器須要運行在擁有公網IP的主機上,由於咱們開發用的電腦一般不會有公網IP,因此這裏的外網只能是你的電腦所在的局域網,好比在客廳的電腦能夠訪問你的筆記本上運行的程序(經過你的筆記本的內網IP)。flask

事實上,藉助內網穿透/映射工具,咱們也可讓外網上的朋友訪問到運行在你的筆記本上的程序。這些工具會爲咱們分配一個域名A,你只須要在本地運行程序,並創建映射,那麼當其餘用戶(不只是你客廳的電腦,還多是北京的毛毛,或是美國的Peter)訪問A網址時,內網穿透工具就會把請求轉發到你的筆記本中,取回響應後再返回給用戶。具體流程以下所示:bash


在這篇文章,咱們會了解如何使用ngrok來實現這個目的。本文將會以一個簡單的Flask程序做爲示例,不過你也能夠替換爲任意的Web程序,好比使用Django、PHP或是JAVA等語言/框架編寫的Web程序。服務器

運行本地服務器

咱們先來編寫一個簡單的Flask程序:微信

from flask import Flask

app = Flask(__name__)

@app.route('/')
def hello():
    return 'It works!'複製代碼

將上面的代碼保存爲app.py,而後打開一個命令行窗口,使用下面的命令運行這個程序:app

$ flask run複製代碼

若是尚未安裝Flask,能夠執行pip install flask命令進行安裝(你也能夠建立一個虛擬環境,推薦使用Pipenv)。框架

默認狀況下,Flask內置的開發服務器會監聽本地機的5000端口,你可使用127.0.0.1:5000或localhost:5000訪問程序。工具

安裝和配置ngrok

ngrok支持三大主流操做系統,安裝流程比較簡單,以下所示:測試

  1. 訪問ngrok.com/download
  2. 根據操做系統下載對應的壓縮包
  3. 解壓到合適的目錄

壓縮包裏包含一個名爲ngrok的二進制文件,咱們打開一個命令行窗口,切換到這個文件所在的目錄。如今能夠先執行help命令來測試一下。在Windows下,你可使用下面的命令:

> .\ngrok help複製代碼

或是直接執行:

> ngrok help複製代碼

在Linux/macOS下,則可使用下面的命令:

$ ./ngrok help複製代碼

創建映射/HTTP隧道

由於咱們的Flask程序已經運行在本地機的5000端口,咱們只須要啓動ngrok服務,輸入對應的端口便可創建映射,或者說創建一條HTTP隧道:

$ ./ngrok http 5000複製代碼

附註 在Windows下可使用ngrok http 5000命令。

輸出的信息中包含ngrok爲你隨機分配的域名:

Session Status online
Account Grey Li (Plan: Free)
Version 2.2.8
Region United States (us)
Web Interface http://127.0.0.1:4040
Forwarding http://d15a56b1.ngrok.io -> localhost:5000
Forwarding https://d15a56b1.ngrok.io -> localhost:5000

Connections ttl opn rt1 rt5 p50 p90
0 0 0.00 0.00 0.00 0.00複製代碼

其中的https://d15a56b1.ngrok.io就是爲你分配的能夠外部訪問的網址,全部發向這個網址的請求都會轉發到你的本地機5000端口,即localhost:5000或127.0.0.1:5000。這時訪問這個網站會看到咱們上面程序中定義的輸出「It works!」。

當有請求進入後,你能夠在這裏看到請求列表。另外,你也能夠訪問http://127.0.0.1:4040訪問ngrok本地程序提供的Web監控頁面。

註冊帳戶與付費套餐

在上面的流程裏咱們並無介紹註冊帳戶,由於這是可選的。未註冊時,你執行ngrok http命令的輸出會和上面稍微有些不一樣,你會看到下面兩行:

Session Status online
Session Expires 7 hours, 42 minutes複製代碼

這是由於未註冊帳戶每一個會話只會維持8小時,過時後你須要從新啓動。

註冊用戶沒有這個限制,註冊至關簡單,這裏再也不贅述,註冊完成後須要執行下面的命令鏈接本地ngrok程序:

$ ./ngrok authtoken <令牌值>複製代碼

附註 Windows系統可使用ngrok authtoken <令牌值>命令。

命令中的令牌值能夠在註冊後跳轉的控制面板頁面看到,以下圖所示:

你也能夠訪問dashboard.ngrok.com/auth查看。

每次創建映射,ngrok都會分配一個隨機子域的網址,若是你想擁有一個固定的域名,則要升級套餐。升級套餐的好處不少,但若是隻是臨時測試用的話,免費帳戶或是不註冊使用就足夠了。

注:更多的功能介紹能夠訪問ngrok.com/product查看。文圖均來自ngrok.com

相關文章
相關標籤/搜索