为什么要内网穿透
我们在做微信开发的时候,避免不了的就是验证自己的服务器 URL
并且,这个 URL 是只能填写域名的,不能够填写 IP 地址,但是,我们在开发调试期间,不可能真的要把自己的服务打包到云服务器上,然后再用域名解析的方式解析到自己的云服务器。这是非常不友好的一种方式,姑且不说部署测试环境花的时间,光是远程调试就会遇到很多猝不及防的问题。所以我们就需要做一下内网穿透,将一个公网域名映射到自己的本地环境上面来,这样就大大简化了我们调试的步骤。
PS:文末有惊喜!!!
常见的内网穿透
既然内网穿透用处这么大,那肯定就会有互联网公司会推出便携式内网穿透的服务,常见的便携式内网穿透就有 natapp,sunny ngrok,以及花生壳(👎 ),当然,既然是便携式内网穿透,我们肯定是需要支付一定的 Money 才能后有良好的体验,虽然有免费的,比如 natapp,它的免费套餐每一次重新启动都会更换一个域名,端口也会随机改变,着很显然不符合我们做微信开发的业务需求。一句话说完,要想在便携式内网穿透获得良好的体验,这肯定是需要我们付出一点代价的哈哈哈哈哈。
屌丝逆袭-做自己的内网穿透服务器
既然便携式的要花钱,那我们就自己部署一个内网穿透的服务
我们需要准备的东西有
- 一个带公网 IP 的服务器
- 一个已经备案的域名(二级域名最好,顶级域名拿来做这个浪费了哈哈哈哈)
我这里是用的华为的一台 1 核 2G 的服务器,域名的话,我就用 ngrok.gouzhong1223.com
来做演示
建议大家都拿一些小的,或者是闲置的服务器来部署这个,毕竟这个不是我们的主线业务,我的这一台服务器也是闲置的,就只是部署了一个私有云项目(如本文最后的资源链接)。
准备工作
我们来到自己的域名控制面板,解析两个 A 记录到我们的服务器上面来
这里我解析了一个泛域名到服务器上是为了方便以后拓展,意思就是类似于 xxx.ngrok.gouzhong1223.com
的域名我们以后也能进行穿透。
开始正式搭建
本次搭建的环境是依赖了一个 Docker 镜像的,点击这里跳转到镜像仓库。
我们将镜像拉倒宿主机上面来
完成之后输入命令 docker images
,出现这个就说明我们拉取成功了!
我们直接运行下面这个命令
docker run --rm -it -e DOMAIN="ngrok.gouzhong1223.com" -v /data/ngrok:/myfiles hteen/ngrok /bin/sh /build.sh
就会开始初始化镜像
这里注意一下,就是上面那个 ngrok.gouzhong1223.com
你们需要更换成自己的域名
这一步需要等待的时间有点长,因为它需要从 GitHub 上面下载一些依赖,而 GitHub 的服务器又是亚马逊的,国内的服务器到那边下载还是需要等很长一段时间的(真的挺久的哈哈哈哈哈,特别是上面截图的这个地方)。
等到完成之后,在我们宿主机的 data/ngrok
目录下面就会有这样几个文件
bin/ngrokd 服务端
bin/ngrok linux客户端
bin/darwin_amd64/ngrok osx客户端
bin/windows_amd64/ngrok.exe windows客户端
然后就开始正式运行 Ngrok 服务端
docker run -idt --name ngrok-server \
-v /data/ngrok:/myfiles \
-p 80:80 \
-p 443:443 \
-p 4443:4443 \
-e DOMAIN='ngrok.gouzhong1223.com' hteen/ngrok /bin/sh /server.sh
还是和上面一样,这里的域名需要你们更换成自己的域名。
改造
其实上面那种构建方式是存在一定的问题的哈,因为我们在指定端口映射的时候,指定的是 80 映射到 80,443 映射到 443,我们知道,在服务器中,80 端口和 443 端口是非常珍贵的,除非你的机器上面只跑这一个项目,不然的话,我们就需要把 80 端口还有 443 端口留给 Nginx,于是我们做一下改造:
- 删除我们刚才创建的容器
- 重新创建容器
执行:
docker run -idt --name ngrok-server \
-v /data/ngrok:/myfiles \
-p 8882:80 \
-p 4432:443 \
-p 4443:4443 \
-e DOMAIN='ngrok.gouzhong1223.com' hteen/ngrok /bin/sh /server.sh
这样,我们就避免了 80 端口还有 443 端口被占用的问题
然后开始配置我们的 Nginx
192.168.0.131 是我的内网 IP
重启我们的 Nginx,到此我们的 Ngrok 就算搭建好了
启动
刚刚在上文中说到的,在 /data/ngrok/bin
里面生成了我们的客户端,这里我那 Mac OS 来给大家演示一下如何启动我们的服务
将生成的客户端下载到我本地来,然后在同级目录下新建一个 ngrok.cfg
配置文件
里面添加以下内容:
server_addr: "ngrok.gouzhong1223.com:4443"
trust_host_root_certs: false
同理,上面的域名更换成你们自己的
然后进入到客户端父目录
执行:
./ngrok -config ./ngrok.cfg -subdomain ngrok 127.0.0.1:8088
这里的 -subdomain
指的是我们自定义的三级域名前缀,比如我这个配置,最终的访问路径就是
ngrok.ngrok.gouzhong1223.com
,它将会映射到我本地的 8088 端口。
如果我们的终端出现以上内容,就说明我们穿透成功了,我们来测试一下可不可以用。
我本地启动了一个 8088 端口的程序,我们通过 http://ngrok.ngrok.gouzhong1223.com 来访问看能不能成功。
我们的穿透成功啦!!!这时候,你就可以把这个这个链接发给你远方的朋友,让他亲自见证一下你装 X 的时刻(手动滑稽),哈哈哈哈哈哈!
多说一句,这里我们搭建的服务暂时是不支持 https 的,请关注本文后面的更新,我们将会把这个服务升级为支持 https 的。
放福利
有些朋友可能暂时不能够搭建内网穿透服务,这里我把我自己的服务免费分享给大家
专用客户端下载链接:https://cloud.gouzhong1223.com/d/5d419a715760433fb5bb/
提取码:GouzhongNgrok12138
只能自定义三级域名哈,可以随便自定义哦!!这样大家就不用花钱取用第三方的了!
谢谢大家的支持!
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于