最接地气的Ngrok服务器搭建教程
前言
简单说一下什么是ngrok:
ngrok是一个内网穿透的解决方案,它使得你本地的服务器可以被局域网外的公网访问到
ngork有服务端和客户端,服务端运行在公网服务器,客户端运行在本地服务器
ngrok服务端会建立http和https服务,默认端口80/443,以及供ngrok客户端连接的服务,默认端口4443
它的工作流程如下:
访问端输入域名->DNS->ngrok服务端->请求映射到ngrok客户端->客户端返回响应到ngrok服务端->ngrok服务端返回响应到访问端
本文环境
centos7 64位 (其它环境请根据流程自行尝试)
准备工作
- 一台公网服务器
- 一个域名,顶级或二级均可
*关于域名:我们声明两个概念:一个是基础域名,可以是顶级或者二级,它用来为ngrok服务端本身提供外部访问(ngrok客户端连接用)。二就是基于基础域名的二级或者三级域名,它用来映射到你的本地服务器,我称它为映射域名。它可以设置多个,这取决于你的需要。例如 abc.com 和 ngrok.abc.com / ngrok2.abc.com,每个映射域名对应一个ngrok客户端*
假设你的域名是 abc.com (全文皆使用此假设)
如果你需要使用顶级域名作为基础域名,那么请将 abc.com 泛解析到服务器ip,然后将你需要使用的二级域名通过A记录解析到服务器ip,例如 ngrok.abc.com
如果你需要使用二级域名,那么先将你的二级域名 xxx.abc.com 通过A记录解析到服务器域名。然后将三级域名(比如 test.xxx)通过CNAME的方式解析到 xxx.abc.com,这次 xxx.abc.com 便成为了客户端与服务端的连接域名,test.xxx.abc.com 则是映射域名
下面的教程我们使用 abc.com 作为基础域名演示,请根据实际替换域名
过程
一,安装git和go以及其它依赖
1 | yum install gcc mercurial git bzr subversion golang golang-pkg-windows-amd64 golang-pkg-windows-386 -y |
二,下载源码 (项目早已停止更新,源码完全固定)
1 | git clone https://github.com/inconshreveable/ngrok.git |
完成后会在当前目录生成ngrok目录
三,生成证书(默认的证书是 ngrok.com,我们需要改成 abc.com)
生成:
1 | cd ngrok |
替换(提示overwrite输入y)
1 | cp rootCA.pem ../assets/client/tls/ngrokroot.crt |
四:生成服务端与客户端
切换回ngrok目录
以下命令按需生成
1 | <!--linux服务端/客户端--> |
所有程序都将生成在bin目录中,不同平台将建立不同的子目录
(当我生成linux 64位程序时,会直接保存在bin目录下无子目录。所以我个人推测,如果生成是当前系统的程序,则无子目录,直接存放于bin目录下。各位若有条件可验证下)
目录中,ngrok是客户端,ngrokd是服务端
1 | linux |
启动服务器:
1 | ./bin/ngrokd -domain="$NGROK_DOMAIN" |
其它配置:
-httpAddr=”:80” http服务的访问端口 默认80
-httpsAddr=”:443” https服务的访问端口 默认443
-tunnelAddr=”:4443” 客户端连接服务端的端口 默认4443
以上端口,如若与系统其他服务有冲突,开启服务时请自行配置其他端口,同时记得配置防火墙
五:客户端配置与连接
通过sz或者ftp等方式将ngrok下载到你需要使用客户端的电脑中
新建配置文件ngrok.cfg
1 | <!--配置服务端连接地址,也就是基础域名。端口则与服务端-tunnelAddr配置相同--> |
运行客户端
1 | ngrok -config=ngrok.cfg -subdomain ngrok 80 |
-subdomain用来指定域名的前缀(也就是映射域名的前缀),如上设置ngrok,当访问ngrok.abc.com时,ngrok服务端接收到请求后,便会将客户端http相应返回给访问端。80用来指定本地http服务的端口
此时,ngrok服务便搭建完成
以上,如有问题,欢迎提问。如有错误,也欢迎指出,谢谢