文中提到的顶级域名,二级域名,三级域名请根据实际情况替换!!!
一台公网服务器(centos系统)
一个备案的域名,假设你的顶级域名为 xxx.com
服务器开放端口4443 443 80
解析对应的基础域名和映射域名,所谓基础域名就是用来ngrok服务本身提供外部访问用的域名,映射域名就是你本地映射出去访问用的域名,现假设你用的基础域名为二级域名 ngrok.xxx.com,映射域名用的是三级域名test.ngrok.xxx.com,
你需要将基础域名和映射域名先做DNS解析,解析规则为:
基础域名(ngrok.xxx.com)通过A记录解析到服务器ip;
映射域名(test.ngrok.xxx.com)通过CNAME的方式解析到基础域名(ngrok.xxx.com)
yum install gcc -y
yum install git -y
yum install mercurial git bzr subversion golang golang-pkg-windows-amd64 golang-pkg-windows-386 -y
git clone https://github.com/inconshreveable/ngrok.git
完成后会在当前目录生成ngrok目录
首选切换至ngrok
cd ngrok
mkdir cert
cd cert
openssl genrsa -out rootCA.key 2048
openssl req -x509 -new -nodes -key rootCA.key -subj "/CN=ngrok.xxx.com" -days 5000 -out rootCA.pem
openssl genrsa -out device.key 2048
openssl req -new -key device.key -subj "/CN=ngrok.xxx.com" -out device.csr
openssl x509 -req -in device.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out device.crt -days 5000
生成证书后替换默认的证书(提示overwrite输入y)
cp rootCA.pem ../assets/client/tls/ngrokroot.crt
cp device.crt ../assets/server/tls/snakeoil.crt
cp device.key ../assets/server/tls/snakeoil.key
切换回ngrok目录
<!--linux服务端-->
GOOS=linux GOARCH=386 make release-server
GOOS=linux GOARCH=amd64 make release-server
<!--Mac OS客户端-->
GOOS=darwin GOARCH=386 make release-client
GOOS=darwin GOARCH=amd64 make release-client
<!--windows客户端-->
GOOS=windows GOARCH=386 make release-client
GOOS=windows GOARCH=amd64 make release-client
执行完毕后会在ngrok 下面的bin目录下生成对应的文件
./bin/ngrokd -domain="ngrok.xxx.com" -httpAddr=":80" -httpsAddr=":8081" -tunnelAddr=":4443"
以上命令可以简写 为 ./bin/ngrokd -domain="ngrok.xxx.com",因为-httpAddr 默认端口是80,-httpsAddr默认端口是443,-tunnelAddr默认端口是4443
启动完你应该看到如下信息:
[09:27:59 CST 2019/11/21] [INFO] (ngrok/log.(*PrefixLogger).Info:83) [registry] [tun] No affinity cache specified
[09:27:59 CST 2019/11/21] [INFO] (ngrok/log.Info:112) Listening for public http connections on [::]:80
[09:27:59 CST 2019/11/21] [INFO] (ngrok/log.Info:112) Listening for public https connections on [::]:8081
[09:27:59 CST 2019/11/21] [INFO] (ngrok/log.Info:112) Listening for control and proxy connections on [::]:4443
从ngrok目录下的bin目录下载对应的客户端到本地,如我是windows客户端,下载了生成的ngrok.exe到电脑上,然后在存放ngrok.exe的存放目录下新建配置文件ngrok.cfg,内容为:
server_addr: "ngrok.xxx.com:4443"
trust_host_root_certs: false
注意 4443端口必须与启动服务器执行命令中的-tunnelAddr值一致。
然后在同级目录下新建一个startup.bat 启动脚本(此步骤可选,只是为了方便快速映射一个端口出来)
@echo on
cd %cd%
#ngrok -proto=tcp 22
#ngrok start web
ngrok -config=ngrok.cfg -log=ngrok.log -subdomain=test 8080
命令行执行 ngrok -config=ngrok.cfg -log=ngrok.log -subdomain=test 8080或者双击startup.bat 启动脚本
启动完成后出现如下信息说明启动成功
ngrok (Ctrl+C to quit)
Tunnel Status online
Version 1.7/1.7
Forwarding http://test.ngrok.xxx.com -> 127.0.0.1:8080
Forwarding https://test.ngrok.xxx.com -> 127.0.0.1:8080
Web Interface 127.0.0.1:4040
# Conn 0
Avg Conn Time 0.00ms
在本电脑8080端口运行一个程序,网页上输入http://test.ngrok.xxx.com
备注:以上服务启动命令只要窗口关闭了服务就停止了,解决办法在命令前加上setsid
setsid ./bin/ngrokd -domain="ngrok.xxx.com" -httpAddr=":80" -httpsAddr=":8081" -tunnelAddr=":4443"
微信扫码关注DEMO程序园公众号