一分鐘教你學會搭建ngrok內網穿透

mars_jun發表於2018-11-30

前言

最近由於專案開發的需要,要和第三方對接一些介面。最開始是想直接部署在公網進行對接,後面發現重複部署以及不利於除錯太浪費時間,對接過程中甚至會堵塞在某個地方許久。最後還是決定通過代理對映到內網,方便除錯和對接。


搭建前提

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目錄中。如圖:

ngrok.png


配置域名解析

這個根據不同的域名商的引導去配置即可。

一分鐘教你學會搭建ngrok內網穿透


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 &
複製程式碼

End

相關文章