注:本文隶属于《Flask Web开发实战》番外文章系列,文章列表见《Flask Web开发实战番外文章索引》。python
在开发Web程序时,有时候会有这样的需求:web
要实现上面的需求,咱们就须要程序可以“外网可见”。在《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的二进制文件,咱们打开一个命令行窗口,切换到这个文件所在的目录。如今能够先执行help命令来测试一下。在Windows下,你可使用下面的命令:
> .\ngrok help复制代码
或是直接执行:
> ngrok help复制代码
在Linux/macOS下,则可使用下面的命令:
$ ./ngrok help复制代码
由于咱们的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。