環(huán)境準(zhǔn)備
阿里云ecs服務(wù)器(例如47.101.41.231)

. 配置公網(wǎng)入口安全組

.配置安全組規(guī)則
如果是對所有ip開放端口的話,授權(quán)對象可以設(shè)置為0.0.0.0/0

.準(zhǔn)備域名
這里是一級基礎(chǔ)域名例如mydomain.com,這個域名是頂級域名很多應(yīng)用都需要使用,像jenkins.mydomain.com/nginx.mydomain.com/wechat.mydomain.com等等

在域名解析中配置域名的解析規(guī)則(例如二級域名,ngrok-dev)
這里特別注意的是二級域名,已經(jīng)二級域名下的所有子域名的解析規(guī)則一定都要配置到ngrok的服務(wù)器
- ngrok-dev.mydomain.com 解析到47.101.41.231
ngrok-dev二級域名下的子域名也需要解析到ngrok的服務(wù)器 - *.ngrok-dev.mydomain.com 解析到47.101.41.231
如果沒有添加二級域名下的子域名解析到ngrok服務(wù)器就會出現(xiàn)很尷尬的問題
2.1 例如本地的客戶端分配的三級域名是wechat
image.png
這個時候,訪問應(yīng)用的地址應(yīng)該是http://wechat.ngrok-dev.mydomain.com/testConnected,
noResponse,沒有返回,
然后ping 這個域名發(fā)現(xiàn)ping 不通
image.png
image.png
2.2 但是如果不使用三級域名,直接使用二級域名訪問的話(http://ngrok-dev.mydomain.com/testConnected)
則返回tunnel not found

如果沒有配置二級以下域名的解析規(guī)則的話就會出現(xiàn)很尷尬的問題

- https的證書
-
阿里云會提供免費的ssl證書,但是不需要去下載使用這個證書,只需要使用openssl的證書就好了
image.png
配置ecs 機(jī)器的防火墻
-
查看防火墻的開啟狀態(tài)
image.png -
查看可以訪問的端口
image.png 添加ngrok 需要的三個端口http 8081 https 8082 tunnel 8083
firewall-cmd --zone=public(作用域) --add-port=8081/tcp(端口和訪問類型) --permanent(永久生效)
firewall-cmd --zone=public(作用域) --add-port=8082/tcp(端口和訪問類型) --permanent(永久生效)
firewall-cmd --zone=public(作用域) --add-port=8083/tcp(端口和訪問類型) --permanent(永久生效)
firewall-cmd --reload # 重新載入,更新防火墻規(guī)則-
準(zhǔn)備ngrok 的打包需要的環(huán)境
yum -y install openssl-devel wget git
這邊安裝了git openssl wget 命令
ngrok 需要的go 語言環(huán)境,使用wget在官網(wǎng)下載
image.png
wget https://storage.googleapis.com/golang/go1.12.5.linux-amd64.tar.gz
tar -C /usr/local -xzf go1.8.3.linux-amd64.tar.gz
vim /etc/profile
//添加以下內(nèi)容:
export PATH=$PATH:/usr/local/go/bin
source /etc/profile
//檢測是否安裝成功go
go version
8.下載ngrok源碼
mkdir /ngrok
cd /ngrok
git clone https://github.com/inconshreveable/ngrok.git
9.生成openssl證書
export NGROK_DOMAIN="ngrok-dev.mydomain.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
覆蓋原本證書
yes|cp rootCA.pem ../assets/client/tls/ngrokroot.crt
yes|cp device.crt ../assets/server/tls/snakeoil.crt
yes|cp device.key ../assets/server/tls/snakeoil.key
10.編譯
GOOS=linux GOARCH=amd64 make release-server
GOOS=windows GOARCH=amd64 make release-client
- 啟動
setsid ./bin/ngrokd -tlsKey="assets/server/tls/snakeoil.key" -tlsCrt="assets/server/tls/snakeoil.crt" -domain="ngrok-dev.mydomain.com" -httpAddr=":8081" -httpsAddr=":8082" -tunnelAddr=":8083"
- 下載客戶端到本地
客戶端ngrok.config的配置
注意:證書的域名,ngrok服務(wù)器端啟動腳本中的域名,客戶端server_addr中配置的域名要保持一致,要不然會報證書不匹配
server_addr: "ngrok-dev.mydomain.com:8083"
trust_host_root_certs: false
tunnels:
http:
remote_port: "8081"
subdomain: "wechat"
proto:
http: "8088"
https:
remote_port: "8081"
subdomain: "wechat"
proto:
https: "8088"
- 客戶端的啟動腳本
./ngrok.exe -config=C:\Users\70736\Desktop\ngrok\ngrok.cfg -log=C:\Users\70736\Desktop\ngrok\ngrok.log start http https
注意:最好加上-log可以看到一些錯誤信息,然后有目的性的排查,
不要使用 ./ngrok.exe -subdomain dev -config=C:\Users\70736\Desktop\ngrok\ngrok.cfg -log=C:\Users\70736\Desktop\ngrok\ngrok.log 8088這個腳本啟動,不要理解,容易讓人誤導(dǎo)






