服务器环境:Centos6 x86 (32位)
准备工作
一台VPS,一个域名,另外需要准备 golang 环境和 git,因为ngrokd和ngrok的编译是用 golang 。
Centos下使用epel源安装GO语言环境:
$ yum install golang
检查GO语言是否安装成功
$ go version
输出:go version go1.7.6 linux/386 表示成功
搭建流程
1.下载 ngrok 源码
$ cd /usr/local/ $ git clone https://github.com/inconshreveable/ngrok.git $ export GOPATH=~/ngrok $ cd ngrok/
2.生成签名证书
在自生成证书时需要一个解析到服务器上的主域名,现在以”test.com”为例。
$ export NGROK_DOMAIN="test.com" $ openssl genrsa -out rootCA.key 2048 $ openssl req -x509 -new -nodes -key rootCA.key -subj "/CN=$NGROK_DOMAIN" -days 5000 -out rootCA.pem $ openssl genrsa -out device.key 2048 $ openssl req -new -key device.key -subj "/CN=$NGROK_DOMAIN" -out device.csr $ openssl x509 -req -in device.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out device.crt -days 5000
将新生成的证书,替换掉 assets/client/tls 路径下的证书
$ cp rootCA.pem assets/client/tls/ngrokroot.crt $ cp device.crt assets/server/tls/snakeoil.crt $ cp device.key assets/server/tls/snakeoil.key
3.编译生成ngrokd(服务端)
在 ngrok 目录下执行以下命令:
$ make release-server
编译成功后,生成的 ngrokd 保存到 ngrok/bin/ 路径下。
4.编译生成ngrok(客户端)
由于我打算在window环境下使用,所以编译生成的系统OS需要指定为 windows。
$ GOOS=windows GOARCH=amd64 make release-client
编译成功后,会在 ngrok/bin/ 路径下多一个 windows_amd64 的文件夹。将该文件夹拉取到本机windows下即可执行。
5.启动ngrokd
$ ./ngrokd -domain="$NGROK_DOMAIN" -httpAddr=":8091" -httpsAddr=":8092" -tunnelAddr=":8083" #出现下面信息则表示启动成功 [09:40:30 EDT 2017/07/22] [INFO] (ngrok/log.(*PrefixLogger).Info:83) [registry] [tun] No affinity cache specified [09:40:30 EDT 2017/07/22] [INFO] (ngrok/log.Info:112) Listening for public http connections on [::]:8091 [09:40:30 EDT 2017/07/22] [INFO] (ngrok/log.Info:112) Listening for public https connections on [::]:8092 [09:40:30 EDT 2017/07/22] [INFO] (ngrok/log.Info:112) Listening for control and proxy connections on [::]:8083 [09:40:30 EDT 2017/07/22] [INFO] (ngrok/log.(*PrefixLogger).Info:83) [metrics] Reporting every 30 seconds
6.启动ngrok
在 windows_amd64 文件夹创建 nrgok.cfg 文件,内容如下:
server_addr: "test.com:8083" #test.com替换为自己的域名 trust_host_root_certs: false tunnels: http: subdomain: "wx" #子域名 proto: http: "8010" #监听本地的端口 https: subdomain: "wxs" proto: https: "8011"
创建好配置文件之后,在CMD切换到 windows_amd64 目录下,执行以下命令:
ngrok.exe -config ngrok.cfg start http
若看到以下信息则表示成功启动客户端:
Tunnel Status online Version 1.7/1.7 Forwarding http://wx.test.com:8091 -> 127.0.0.1:8010 Forwarding https://wxs.test.com:8092 -> 127.0.0.1:8011 Web Interface 127.0.0.1:4040 # Conn 0 Avg Conn Time 0.00ms
-------------------------------------------------------------------------------------------------------------
若要监听 80 端口,同时避免和其他应用冲突,可以使用Nginx进行代理配置。
修改 Nginx.conf 文件,在 http 模块下添加以下内容,然后重启Nginx服务即可直接访问。
upstream ngrok_http { server 127.0.0.1:8091; keepalive 64; } server { listen 80; server_name *.自己的域名; 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:8091; proxy_set_header X-Nginx-Proxy true; proxy_set_header Connection ""; proxy_pass http://ngrok_http; } }