前言
最近由於專案開發的需要,要和第三方對接一些介面。最開始是想直接部署在公網進行對接,後面發現重複部署以及不利於除錯太浪費時間,對接過程中甚至會堵塞在某個地方許久。最後還是決定通過代理對映到內網,方便除錯和對接。
搭建前提
1.需要一臺公網伺服器。這個可以租一臺雲伺服器來解決。 2.需要一個域名。本人租個.cn的域名一年也只要個30塊錢左右。
環境依賴
yum install build-essential golang mercurial git
git clone https://github.com/tutumcloud/ngrok.git ngrok
//安裝nginx你也可以選擇自己編譯
yum install -y nginx
//設定環境變數,這裡的hcyhj.cn是你的域名,需要自己修改
export NGROK_DOMAIN="hcyhj.cn"
複製程式碼
配置ngrok
//進入到你clone下來的ngrok目錄中
cd ngrok
//執行下面的命令(可以一個字都不用更改,大概就弄證書和祕鑰吧。。。)
openssl genrsa -out base.key 2048
openssl req -new -x509 -nodes -key base.key -days 10000 -subj "/CN=$NGROK_DOMAIN" -out base.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 base.pem -CAkey base.key -CAcreateserial -days 10000 -out server.crt
//將生成的檔案copy過去
cp base.pem assets/client/tls/ngrokroot.crt
複製程式碼
編譯客戶端和服務端
//編譯linux服務端 linux客戶端
make release-server release-client
//編譯windows客戶端
GOOS=windows GOARCH=amd64 make release-client
複製程式碼
這裡編譯好的檔案會存放在ngrok/bin目錄中。如圖:
配置域名解析
這個根據不同的域名商的引導去配置即可。
nginx配置檔案的配置
//在nginx配置檔案nginx.conf中新增如下配置
server {
listen 80;
server_name *.hcyhj.cn hcyhj.cn ;
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:8081;
proxy_set_header X-Nginx-Proxy true;
proxy_set_header Connection "";
proxy_pass http://127.0.0.1:8081;
}
}
複製程式碼
配置完啟動nginx。
啟動ngrok
//注意:這裡的httpAddr對應的埠需要和nginx配置中proxy_pass 和proxy_set_header埠一致
./bin/ngrokd -tlsKey=server.key -tlsCrt=server.crt -domain="hcyhj.cn" -httpAddr=":8081" -httpsAddr=":8082"
複製程式碼
windows客戶端
從上圖(ngrok.png)位置拉取nginx.exe放到windows上,在同目錄下新建配置檔案,隨便弄個名字即可。例如ngrok.conf。
//在配置檔案中加入程式碼,這裡域名hcyhj.cn需要和上述環境變數配置的域名一致,埠為4443,服務端ngrokd啟動有個預設通訊埠4443對外開放
server_addr: hcyhj.cn:4443
//不使用ssl證書
trust_host_root_certs: false
複製程式碼
新建bat檔案,加入程式碼
//注意:subdomain是你要使用的域名和埠
cd %cd%
ngrok -config=ngrok.conf -subdomain=www 8087
複製程式碼
配置完成執行bat指令碼啟動ngrok客戶端。然後在瀏覽器輸入 www.hcyhj.cn (這裡的hcyhj.cn是你自己的域名)便會跳轉到你本地8087埠的應用上。這裡可以啟用多個,只需要改配置檔案的subdomain,例如改成subdomain=aa 8081,便訪問 aa.hcyhj.cn 對映到本地的8081埠的應用上。依次類推。
小知識點
部署好後,發現linux上的ngrok伺服器不能在後臺執行。後面經過google找到一個解決辦法,啟動時加入引數 -log 即可,例如:
nohup ./bin/ngrokd -tlsKey=server.key -tlsCrt=server.crt -domain="hcyhj.cn" -httpAddr=":8081" -httpsAddr=":8082" -log=stout &
複製程式碼