ngrok是什么(借别人的一段来说明)?
做前端开发的童鞋或许不会太陌生。
如果你完全不知道它是什么东西,可以在它的github项目上了解下:https://github.com/inconshreveable/ngrok
这里只提下它的核心功能:能够将你本机的HTTP服务(站点)或TCP服务,通过部署有ngrok服务的外网伺服器暴露给外网访问!
如上封面图所示,举一个栗子。
- 橘色屏幕的笔记本是你的工作机器,安装了ngrok客户端
- ngrok.com所在的服务器安装了ngrok的服务端(ngrokd)
- 利用ngrok 8080命令可以将你本机的8080端口暴露给反向代理至ngrok.com的某个二级域名如:xxx.ngrok.com
- 别人通过xxx.ngrok.com就可以访问你本机8080端口上的站点内容了。
由此可见,除了Weinre、browsersync 这些惯用的手段外,借助ngrok,也一样可以解决前端开发过程经常遇到的“本地开发,外网调试”老大难题。
囧的是:ngrok.com被墙了,我们已无法用它官方的服务~
国内虽然有一些第三方的ngrok服务,但是也无法保证其稳定性。
还好ngrok是开源的,我们可以通过它的源码在自己的外网服务器上搭建自己的ngrok服务。
前提条件是:一台外网可访问的主机,且有域名解析至该主机上。
我服务器环境为:
内存:8G 带宽 :5M
搭建服务器端Ngrokd
1、安装go语言开发环境
ngrok是利用go语言开发的,所以先要在服务器上安装go语言开发环境。
以CentOS的服务器示例,安装Go语言很简单的:
|
|
安装完毕后,利用go version来验证是否安装成功。
go安装好后,我们再设置下go的环境变量:
在~/.bash_profile
文件内,加入以下环境变量配置内容:
|
|
保存后,重新给shell加载下配置文件:source ~/.bash_profile
最后可通过go env查看是否配置成功。
2、安装git由于我机器上自带已安装git,所以这里省略了安装办法,各位请自行搜索一下安装 方法
3、fork并拉取ngrok源码
下面编译过程需要改官方的部分源码,所以最好fork一份源码至自己的github账户。
|
|
源码拉取下来后,需要修改一个地方:
打开src/ngrok/log/logger.go
文件
将code.google.com/p/log4go
修改为:github.com/alecthomas/log4go
googlecode已经寿终了,我们将依赖的log4go替换成github的版本。
不过我拉取的源码,里面已修改了。
在编译ngrok的源码之前,我们还需要改下官方源码用到的签名证书。
4、生成自签名证书
使用ngrok.com官方服务时,我们使用的是官方的SSL证书。自建ngrokd服务,如果不想买SSL证书,我们需要生成自己的自签名证书,并编译一个携带该证书的ngrok客户端。
证书生成过程需要一个NGROK_BASE_DOMAIN。 以ngrok官方随机生成的地址693c358d.ngrok.com为例,其NGROK_BASE_DOMAIN就是”ngrok.com”,如果你要 提供服务的地址为”example.ngrok.xxx.com”,那NGROK_BASE_DOMAIN就应该 是”ngrok.xxx.com”。
我们这里以NGROK_BASE_DOMAIN=“ngroklive.net”为例,生成证书的命令如下:
|
|
执行完以上命令,在ngrok目录下就会新生成6个文件:
|
|
ngrok通过bindata将ngrok源码目录下的assets目录(资源文件)打包到可执行文件(ngrokd和ngrok)中 去,assets/client/tls和assets/server/tls下分别存放着用于ngrok和ngrokd的默认证书文件,我们需要将它们替换成我们自己生成的:(因此这一步务必放在编译可执行文件之前)
|
|
在ngrok目录下执行如下命令,编译ngrokd:
|
|
类似的,利用以下命令编译ngrok:
|
|
成功编译后,会在bin目录下找到ngrokd
和ngrok
这两个文件。
我们将ngrokd文件拷贝至~/go/bin
目录下,以方便在其他目录内也可以直接通过ngrokd来访问该执行程序。
ngrokd -domain="ngroklive.net" -httpAddr=":80" -httpsAddr=":443"
添加两条A记录:ngroklive.net和*.ngroklive.net指向我们刚刚创建服务器的IP
8、验证:
ngrokd服务配置好了,客户端程序也有了,下面测试下ngrok是否能够正常使用。
-
创建一个ngrok配置文件:ngrok.cfg
12server_addr: “ngroklive.net:4443 "trust_host_root_certs: false -
运行客户端,暴露80端口的站点
1$ ngrok -subdomain test -config=/Users/lv/bin/ngrok.cfg 80
- WINDOWS下执行的效果
-
另外:
一、WINDOWS下Ngrok编译如下:
cd /usr/local/go/src(或所在的目录)
GOOS=windows GOARCH=amd64 ./make.bash
cd ngrok所在的目录
GOOS=windows GOARCH=amd64 make release-client
#同理,这里的amd64是64位系统,32位改成386
#应该会在 bin/windows_amd64 目录下生成ngrok客户端程序
二、Mac上编译的如下:
cd /usr/local/go/src(或所在的目录)
GOOS=darwin GOARCH=amd64 ./make.bash
然后回去ngrok目录,接着编译:(或所在的目录)
cd /usr/local/src/ngrok
GOOS=darwin GOARCH=amd64 make release-client
完成后会在 /usr/local/src/ngrok/bin/darwin_amd64/ 下发现 ngrok 文件,将其拷贝到Mac上面,像上面windows
的设置即可使用。