一分钟教你学会搭建ngrok内网穿透
2018-11-30 本文已影响0人
marsjhe
前言
最近由于项目开发的需要,要和第三方对接一些接口。最开始是想直接部署在公网进行对接,后面发现重复部署以及不利于调试太浪费时间,对接过程中甚至会堵塞在某个地方许久。最后还是决定通过代理映射到内网,方便调试和对接。
搭建前提
1.需要一台公网服务器。这个可以租一台云服务器来解决。
2.需要一个域名。本人租个.cn的域名一年也只要个30块钱左右。
环境依赖
yum install build-essential golang mercurial git
git clone https://github.com/tutumcloud/ngrok.git ngrok
//安装nginx你也可以选择自己编译
yum install -y nginx
//设置环境变量,这里的hcyhj.cn是你的域名,需要自己修改
export NGROK_DOMAIN="hcyhj.cn"
配置ngrok
//进入到你clone下来的ngrok目录中
cd ngrok
//执行下面的命令(可以一个字都不用更改,大概就弄证书和秘钥吧。。。)
openssl genrsa -out base.key 2048
openssl req -new -x509 -nodes -key base.key -days 10000 -subj "/CN=$NGROK_DOMAIN" -out base.pem
openssl genrsa -out server.key 2048
openssl req -new -key server.key -subj "/CN=$NGROK_DOMAIN" -out server.csr
openssl x509 -req -in server.csr -CA base.pem -CAkey base.key -CAcreateserial -days 10000 -out server.crt
//将生成的文件copy过去
cp base.pem assets/client/tls/ngrokroot.crt
编译客户端和服务端
//编译linux服务端 linux客户端
make release-server release-client
//编译windows客户端
GOOS=windows GOARCH=amd64 make release-client
这里编译好的文件会存放在ngrok/bin目录中。如图:
ngrok.png
配置域名解析
这个根据不同的域名商的引导去配置即可。
nginx配置文件的配置
//在nginx配置文件nginx.conf中添加如下配置
server {
listen 80;
server_name *.hcyhj.cn hcyhj.cn ;
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host:8081;
proxy_set_header X-Nginx-Proxy true;
proxy_set_header Connection "";
proxy_pass http://127.0.0.1:8081;
}
}
配置完启动nginx。
启动ngrok
//注意:这里的httpAddr对应的端口需要和nginx配置中proxy_pass 和proxy_set_header端口一致
./bin/ngrokd -tlsKey=server.key -tlsCrt=server.crt -domain="hcyhj.cn" -httpAddr=":8081" -httpsAddr=":8082"
windows客户端
从上图(ngrok.png)位置拉取nginx.exe放到windows上,在同目录下新建配置文件,随便弄个名字即可。例如ngrok.conf。
//在配置文件中加入代码,这里域名hcyhj.cn需要和上述环境变量配置的域名一致,端口为4443,服务端ngrokd启动有个默认通讯端口4443对外开放
server_addr: hcyhj.cn:4443
//不使用ssl证书
trust_host_root_certs: false
新建bat文件,加入代码
//注意:subdomain是你要使用的域名和端口
cd %cd%
ngrok -config=ngrok.conf -subdomain=www 8087
配置完成执行bat脚本启动ngrok客户端。然后在浏览器输入 www.hcyhj.cn (这里的hcyhj.cn是你自己的域名)便会跳转到你本地8087端口的应用上。这里可以启用多个,只需要改配置文件的subdomain,例如改成subdomain=aa 8081,便访问 aa.hcyhj.cn 映射到本地的8081端口的应用上。依次类推。
小知识点
部署好后,发现linux上的ngrok服务器不能在后台运行。后面经过google找到一个解决办法,启动时加入参数 -log 即可,例如:
nohup ./bin/ngrokd -tlsKey=server.key -tlsCrt=server.crt -domain="hcyhj.cn" -httpAddr=":8081" -httpsAddr=":8082" -log=stout &