描述现象:大多数情况,个人电脑都处于内网,没有可以公开防访问的ip地址,因此其他内网用户无法建立网络连接。
内网穿透作用:将内网的电脑“暴露”到公网。
Ngrok实现内网穿透:
Ngrok官网:ngrok | Unified Ingress Platform for Developers
访问 Ngrok 官网,使用 GitHub 或者邮箱进行注册登录。
选择对应的版本下载,并解压
接下来我们参照官方文档,在本地执行 ngrok 命令添加用户的 authtoken:
复制上图的命令,cmd进入到 ngrok 文件所在的目录执行(管理员运行)
账号信息保存到本地的 ngrok 配置文件中了,接下来只需要执行 ngrok http <端口号>
命令即可启动内网穿透服务。
注意将端口号改为自己本地项目占用的端口号,比如前端一般是 80、后端一般是 8080。
这里填自己项目的端口号
Ngrok 自动生成了一个域名(还是 Https ),指向本机的服务:
在浏览器访问该域名,就能访问到自己电脑上启动的项目啦!
固定域名
通过上述命令直接启动内网穿透,每次得到的访问域名是随机生成的,这不利于我们持续访问。
可以从 ngrok 官网找到静态域名的配置:
第一次进入域名配置页面时,如果没有域名,可以免费创建一个:
创建好域名后,复制下图的 ngrok 启动命令:
然后在终端中执行该命令即可,本质上就是在启动 ngrok 时指定了 domain 参数:
通过这种方式,每次的内网穿透域名都是固定:
后端开发,要让前端访问你本地开发好的接口,通过这种方式就很便捷,不用反复到线上(或者测试服务器)部署项目。
多服务
以上是单服务的内网穿透,但实际情况下,我们本地可能不仅有前端、还有后端服务,那么如何利用 Ngrok 同时内网穿透多个服务呢?
这就需要我们修改 ngrok 的配置文件,手动配置隧道。
首先根据官方文档的指引,找到自己电脑上的默认 ngrok.yml
配置文件:
然后在编辑器中修改这个文件,比如配置前端(frontend)和后端(backend)两条隧道,对应的本地服务端口分别为 12345 和 8000
之后,可以通过 ngrok start <隧道名称>
配置指定启动哪个隧道
或者执行 ngrok start --all
命令同时启动所有隧道,同时在 ngrok-free.app
域名下分配了 2 个子域名,并指向对应服务。
访问不同的域名,就能访问到前端或后端。
但通过上面的方式,每次启动内网穿透得到的域名依然是随机的。我们可以通过修改 ngrok.yml 文件的 domain 配置来指定域名:
Ngrok 限制每个域名只能绑定一个端口。
解决方案,可以在配置文件中指定 subdomain,给每个端口分配一个子域名。但这种方式是需要额外付费的。
如何用固定域名访问本地的多个端口:
可以使用 Nginx 进行转发,如在 80 端口启动 Nginx 服务,内网穿透指向 80 端口,然后根据 url 请求地址的前缀,转发到对应的前端或后端服务。
开发微信公众号后台服务时,需要填写一个服务的域名来接受来自微信侧的请求,如果你没有域名和线上服务器,可以用内网穿透生成一个,还能直接在本地 Debug 程序。