一、环境准备

(1)云服务器或vps(最好国外的,无需备案省去各种麻烦事)

(2)一个域名解析到云服务器或vps的ip (如: ceshi.com)

域名设置(我这里ceshi.com为例)

假设你的域名是ceshi.com,服务器地址是39.156.69.79则你需要解析2条A记录值到服务器

第一条是 @.ceshi.com 第二条是 *.ceshi.com
这样就可以任意二级域名就是作为你ngrok客户端的地址了

如果想使用二级域名则解析以下2个A记录值到服务器,假设你想使用的二级域名是ngrok.ceshi.com

第一条是 ngrok.ceshi.com 第二条是 *.ngrok.ceshi.com
这样 子域名.ngrok.ceshi.com的三级域名就是作为你ngrok客户端的地址了

说明:

主机记录就是域名前缀,常见用法有:

www:解析后的域名为www.aliyun.com。

@:直接解析主域名 aliyun.com。

*:泛解析,匹配其他所有域名 *.aliyun.com。

mail:将域名解析为mail.aliyun.com,通常用于解析邮箱服务器。

二级域名:如:abc.aliyun.com,填写abc。

手机网站:如:m.aliyun.com,填写m。

显性URL:不支持泛解析(泛解析:将所有子域名解析到同一地址)

我使用的是二级域名解析 也就是ngrok.ceshi.com

二、安装go语言及开发环境

1、安装常用依赖库

[root@meissu ~]# yum -y install zlib-devel openssl-devel perl hg cpio expat-devel gettext-devel curl curl-devel perl-ExtUtils-MakeMaker hg wget gcc gcc-c++

2、安装go 和 git

[root@meissu ~]# yum -y install go git

[root@meissu ~]# go version
go version go1.11.5 linux/amd64  #输出此行表示成功安装go

三、下载ngrok源码


[root@meissu ~]# cd /usr/local/

[root@meissu ~]# git clone https://github.com/inconshreveable/ngrok.git ngrok

四、生成域名证书(确保在ngrok目录下)

1.进入ngrok目录
[root@meissu ~]# cd /usr/local/ngrok/

2.设置环境变量
[root@meissu ngrok]# vi ~/.bashrc

最末尾添加:
export NGROK_DOMAIN=ngrok.ceshi.com
:wq!  #保存退出

3.使设置生效
[root@meissu ngrok]# source ~/.bashrc
[root@meissu ngrok]# echo $NGROK_DOMAIN #输出ngrok.ceshi.com表示成功

4.生成证书
[root@meissu ngrok]# openssl genrsa -out rootCA.key 2048
[root@meissu ngrok]# openssl req -x509 -new -nodes -key rootCA.key -subj "/CN=$NGROK_DOMAIN" -days 5000 -out rootCA.pem
[root@meissu ngrok]# openssl genrsa -out server.key 2048
[root@meissu ngrok]# openssl req -new -key server.key -subj "/CN=$NGROK_DOMAIN" -out server.csr
[root@meissu ngrok]# openssl x509 -req -in server.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out server.crt -days 5000

5.把证书放好位置,覆盖原本证书
[root@meissu  ng ngrok]# cp rootCA.pem assets/client/tls/ngrokroot.crt
cp: overwrite 'assets/client/tls/ngrokroot.crt'? y

[root@meissu ngrok]# cp server.crt assets/server/tls/snakeoil.crt
cp: overwrite 'assets/server/tls/snakeoil.crt'? y

[root@meissu ngrok]# cp server.key assets/server/tls/snakeoil.key
cp: overwrite 'assets/server/tls/snakeoil.key'? y

五、生成启动文件

[root@meissu ngrok]# make release-server

这样就会在bin目录下生成ngrokd 这个文件,就是我们ngrok的服务器程序
编译客户端ngrok(不同系统不同的命令如下)

32位linux客户端: GOOS=linux GOARCH=386 make release-client
64位linux客户端: GOOS=linux GOARCH=amd64 make release-client
32位windows客户端: GOOS=windows GOARCH=386 make release-client
64位windows客户端: GOOS=windows GOARCH=amd64 make release-client
32位mac平台客户端:GOOS=darwin GOARCH=386 make release-client
64位mac平台客户端:GOOS=darwin GOARCH=amd64 make release-client
ARM平台linux客户端: GOOS=linux GOARCH=arm make release-client

我这里是64位linux和64位windows客户端编译:
[root@meissu ngrok]# GOOS=linux GOARCH=amd64 make release-client
[root@meissu ngrok]# GOOS=windows GOARCH=amd64 make release-client

六、配置启动服务器

(1)执行脚本

① 前台运行:

[root@meissu ngrok]# /usr/local/ngrok/bin/ngrokd -domain="ngrok.ceshi.com" -httpAddr=":80" -httpsAddr=":443" -tunnelAddr=":4443"

也可以这样写:
[root@meissu ngrok]# /usr/local/ngrok/bin/ngrokd -domain="$NGROK_DOMAIN" -httpAddr=":80"

② 后台运行:

[root@meissu ngrok]# setsid /usr/local/ngrok/bin/ngrokd -domain="ngrok.ceshi.com" -httpAddr=":80" -httpsAddr=":443" -tunnelAddr=":4443"


(2)参数说明:3个端口可随意配置(不能和现有服务端口冲突,服务器需打开对应端口)

#-domain   访问ngrok是所设置的服务地址生成证书时那个域名

httpAddr 是访问普通的http使用的端口号,用后面用 子域名.ngrok.ceshi.com 来访问服务

httpsAddr 是访问的https使用的端口号,同上,只不过是需要https的服务访问才用这个端口(一般用不上)

tunnelAddr 是ngrok通道的端口号,这个端口是Ngrok用来通信的,所以这个端口在服务器上和客户端上设置必须要对应才可以正常的链接,默认端口是4443

(3)注意:

所有涉及的端口,都需在防火墙中设置规则,即打开端口

七、配置windows客户端

1.先把bin目录下windows_amd64文件夹ftp或者sftp传到windows下并进入,然后新建一个 ngrok.cfg,在里面填写以下内容:
server_addr: "ngrok.ceshi.com:4443"
trust_host_root_certs: false

注意:server_addr地址和服务器设置的 $NGROK_DOMAIN=”ngrok.ceshi.com” 中的地址保持一致,如果你服务器启动的时候设置了tunnelAddr端口则把4443也改成你设置的端口

2.启动客户端
ngrok.exe -log=ngrok_log.txt -subdomain=demo -config="ngrok.cfg" 8681

也可以写成:
ngrok.exe -subdomain=demo -config="ngrok.cfg" 8681

日志: -log=ngrok_log.txt 是记录ngrok的日志,如果前期调试的时候加上这个参数,如果不能访问就可以查看到底是什么问题

子域名: -subdomain=demo 是定义访问的时候的子域名,现在访问 demo.ngrok.ceshi.com 就可以访问到这一台机器上8681端口的服务

3.到这里不出意外的话就会启动成功了,访问demo.ngrok.ceshi.com的时候就是你本地的ip了.你可以通过apache或nginx配置demo.ngrok.ceshi.com域名指定你的目录开始使用啦~

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐