自己搭建ngrok服务器代理本地服务
发布于: 2019-09-03 15:32
此文章久未修订,请自行甄别内容准确性。
ngrok做了什么
正常的网络拓扑下,一般通过 255.255.255.0
掩码区分不同网段,即IP的前三段都相同视为同一网段,若想要让两个网段通信,则需要通过路由器来完成,通过在路由器中配置路由表,使两个不同网段的IP建立映射关系。
一般我们请求某个服务器地址时,显然本地局域网地址和远程服务器地址不在同一网段,我们是本地通过连接到本地网关,然后连接至互联网,然后连接至远程服务器。
但是反过来就不行了,想象一下远程服务器该如何请求到一个本地的局域网地址?
答案是NAT技术。
个人版的NAT技术的粗暴理解:类比一下本地请求远程时,客户端是如何接收到远程服务器响应的。对于远程服务器来说,其实只知道有另一个外网地址请求了自己,并给了他响应,这个外网地址即本地网关的外网地址,再由本地网关将这个来自服务器的响应精准的返回给本地地址。即本地网关把一个来自外网服务器的响应转发给了一个本地地址。
所以有哪些简单的方法可以做到:在本地运行一个站点,请求一个外网地址访问到这个站点?
- 直接给本地分配一个外网IP
- 通过一个连接至外网的路由器进行NAT
- 通过ngrok
ngrok的内部做法和NAT不一样(目测其建立了一个C/S连接来实时监听并转发请求,而NAT只需一张映射表被动的转发请求),但做的事情类似,远程服务器请求的是我们拥有外网地址的网关(运行了ngrok server的个人服务器),然后由 ngrock server 来映射至建立好连接的本地 ngrok client,并根据 ngrok client 配置好的规则转发至特定端口。总结:整个ngrok(包括运行在本地的client)都属于负责转发请求的网关,这整个过程成为内网穿透。
ngrok能做什么
- 本地调试微信授权
- 本地调试 github hook
- 任何需要接收外网回调的调试场景
使用ngrok需要自己准备什么
- 外网服务器
- 已备案域名
- 想要在本地调试开放平台回调等
- 感到ngrok官方自带的不够用
使用ngrok需要如何配置
- git clone 源码
- 生成 根证书
- 编译服务端 用生成的根证书
- 编译客户端 用生成的根证书 选实际客户端的平台比如mac
- 服务端配置 服务器http端口 服务器https端口 ngrok服务运行端口
- 云服务器存在安全组记得放开ngrok的服务器端口 比如4443
- 客户端配置 本地端口 远程服务器端口
- nginx配置 隐藏远程端口而使用泛域名
此文章还在更新中