說明
瞭解本文之前,最好先看前篇:<<微信公衆號開發80端口映射解決方案>>。最近公司要搞微信公衆號開發,需要解決80端口映射的問題,爲了穩定可靠,只好自己搭建ngrok服務端。ngrok 是一個使用go語言編寫的反向代理軟件,通過在公共的端點和本地運行的 Web 服務器之間建立一個安全的通道,實現內網穿透。ngrok 可捕獲和分析所有通道上的流量,便於後期分析和重放。
環境和條件
服務器Centos6.8_x64+windows10_x64
一臺有公網ip的服務器
域名解析到服務器。此處拿域名ngrok.XXX.com舉例。
關於域名解析,如果你的域名是爲此專用的,可以開啓泛解析到此服務器上面。如果你的主域名已經在用,你僅僅需要一個二級域名解析到此服務器,並且開啓二級域名的泛解析。我選擇是第二種,如下圖。當然你不做泛解析也可以,自己在本地hosts文件添加記錄也可以。
安裝步驟
一.安裝依賴包
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++ git
二.安裝go語言環境
可以選擇yum安裝,我選擇yum安裝
yum install -y golang
也可以手動安裝,下載地址http://www.golangtc.com/download
下載安裝包之後,直接解壓,配置環境變量即可。
三.編譯ngrok
3.1下載ngrok源碼並設置變量
cd /usr/local/
git clone https://github.com/inconshreveable/ngrok.git
export GOPATH=/usr/local/ngrok/
export NGROK_DOMAIN="ngrok.XXX.com"
cd /usr/local/ngrok
3.2生成自簽名證書,ngrok爲ssl加密連接。
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 server.key 2048 openssl req -new -key server.key -subj "/CN=$NGROK_DOMAIN" -out server.csr openssl x509 -req -in server.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out server.crt -days 5000
拷貝證書文件到指定位置
cp rootCA.pem assets/client/tls/ngrokroot.crt
cp server.crt assets/server/tls/snakeoil.crt
cp server.key assets/server/tls/snakeoil.key
服務器在國內需要修改,在國外不用修改
vim /usr/local/ngrok/src/ngrok/log/logger.go
log "github.com/keepeye/log4go"
3.3 編譯服務端和linux客戶端,GOOS和GOARCH可以參照go env
cd /usr/local/ngrok/
GOOS=linux GOARCH=amd64
make clean
make release-server release-client
執行完會在當前目錄生成一個bin
文件夾,裏面包含了ngrokd
和ngrok
文件;
其中,bin/ngrokd
文件是服務端程序;bin/ngrok
文件是客戶端程序(注意上面指定了GOOS
爲
64位linux的,所以這個文件是不能在mac
或win
等其他平臺跑的,下面將進行說明如何交叉編譯)
3.4 交叉編譯客戶端
Windows客戶端
cd /usr/local/ngrok/
GOOS=windows GOARCH=amd64
make release-client
MAC客戶端
cd /usr/local/ngrok/
GOOS=darwin GOARCH=amd64
make release-client
客戶端配置文件
server_addr: "ngrok.XXX.com:4443"
trust_host_root_certs: false
四.啓動服務
/usr/local/ngrok/bin/ngrokd -domain="$NGROK_DOMAIN" -httpAddr=":80"
後臺運行
setsid /usr/local/ngrok/bin/ngrokd -domain="$NGROK_DOMAIN" -httpAddr=":80"
啓動服務後會,默認會開啓監聽80,443,4443。當然80和443端口你可以指定端口,只需要如下啓動服務
bin/ngrokd -domain="ngrok.XXX.com" -httpAddr=":8888" -httpsAddr=":8889"
開啓客戶端
ngrok -config=ngrok.cfg -subdomain=test 80
啓動成功如下效果