type
status
date
slug
summary
tags
category
icon
password
前言
2015年时做微信开发,当时因为调试h5支付只能在线上域名下运行,嫌频繁发布麻烦,就看了不少教程后搭建了自己的ngrok服务;最近又需要自己搭建使用的时候,又重新踩了不少坑才弄好,所以记录下过程方便以后查看;
准备工作
- 一台装了golang环境的电脑用来编译;
- 一台有公网的vps用来跑服务端;
- 一个域名用来解析服务地址(备案域名才能用于微信开发);
下载ngrok源码
自签名证书
首先需要export一个环境变量,地址为需要提供服务的域名,然后开始生成证书;
生成证书
拷贝证书
编译ngrok
如果客服端和服务端环境一样(如,linux+amd64),直接编译客户端+服务端就好
通常情况下服务端都是linux,客户端win、mac、linux都有,此时需要交叉编译;
在linux下编译64位的mac客户端如下所示:
启动服务端
- 拷贝snakeoil.crt、snakeoil.key、ngrokd到vps上;
- 在ngrokd所在目录执行新建run.sh,执行chmod +x run.sh后使用./run.sh启动;
run.sh内容如下:
启动客户端
- 拷贝ngrok文件到本地任意目录;
- 在ngrok所在目录新建my.cfg文件,然后执行./ngrok -config=my.cfg start http #其中http为tunnels中的具体配置项;
my.cfg中配置了一个http代理,一个tcp代理,启动的时候指定需要的即可
代理配置
如上demo启动成功后可以通过http://t.n.songpo.pro:8081来访问;对用户来说,标准的80端口或者443端口使用起来更加方便;因为80和443被nginx占用,并且https的证书是自签名的,所以通过nginx代理更合适;
配置后可以通过http://t.n.songpo.pro 直接访问,对用户隐藏了8081这个端口号;
需要https的时候加下证书和端口即可,其它配置不变,继续转发到http://127.0.0.1:8081
注意事项
- 所有的远程端口都需要防火墙配置入站规则为允许,如示例中端口为:80、3389、4443、8081、8082;
- 上边用到的那些目录都需要root权限,需要在命令前加sudo,或者修改下$GOPATH的目录;
- ngrok的2.0版本不再开源,github目前停留在最新的1.7版本;
同类软件
- 花生壳(商业化软件,使用简单)