需求背景:
項目需要被其他設備訪問,不在同一個局域網。 可以使用ngrok來將開發設備的端口映射至外網,從而達到讓其他設備訪問的目的。
本文以阿里雲服務器為例,服務器必須有公網地址,配置無所謂,主要起一個轉發的作用。
需要環境git、go
aliyun自帶git
go語言版本無要求,可以使用yum傻瓜式安裝(yum install go -y)
一、下載ngrok
cd /www/ngrok
git clone https://github.com/tutumcloud/ngrok.git
二、生成ngrok使用的https證書
cd /www/ngrok/ngrok
NGROK_DOMAIN="www.*****.top" 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
注意:第二行部分為服務器的域名
將生成的證書替換
cp base.pem assets/client/tls/ngrokroot.crt
cp server.crt assets/server/tls/snakeoil.crt cp server.key assets/server/tls/snakeoil.key
三、編譯服務端
make release-server
生成bin/ngrok
四、編譯客戶端
GOOS=windows GOARCH=amd64 make release-client
生成bin/windows_amd64/ngrok.exe
把ngrok.exe
下載到你電腦
五、運行服務端
后台運行
nohup ./bin/ngrokd -tlsKey=server.key -tlsCrt=server.crt -domain="www.***com" -httpAddr=":3080" -httpsAddr=":3043" >/dev/null 2>log &
注意:上面的域名為步驟二中的域名,這兩處需要一致
注意:
1、3080,3043端口可以改成80,443,如果這兩個端口空閑的話。
2、阿里雲安全組開放3080、3043、4443端口,4443是默認的客戶端通信端口。
3、iptables開放3080、3043、4443端口。
4、添加兩條域名解析ngrok和*.ngrok,第二條記得帶上*.,不然無法匹配xxx.ngrok.test.com三級域名。
六、運行客戶端
創建編輯配置文件ngrok.cfg
server_addr: "www.****.top:4443"
trust_host_root_certs: false
運行
cmd 將目錄切換到ngrok的目錄,執行以下命令
ngrok -config=ngrok.cfg -subdomain abc 8080
其中
abc 為前置域名
8080 為本地機器需要映射出去的端口
下面附圖為我的機器客戶端啟動后的截圖