阿里云ecs搭建ngrok內(nèi)網(wǎng)穿透服務(wù)器,解決微信開發(fā)聯(lián)調(diào)https域名問題

環(huán)境準(zhǔn)備

阿里云ecs服務(wù)器(例如47.101.41.231)

image.png

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

image.png

.配置安全組規(guī)則

如果是對所有ip開放端口的話,授權(quán)對象可以設(shè)置為0.0.0.0/0

image.png

.準(zhǔn)備域名

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

image.png

在域名解析中配置域名的解析規(guī)則(例如二級域名,ngrok-dev)
這里特別注意的是二級域名,已經(jīng)二級域名下的所有子域名的解析規(guī)則一定都要配置到ngrok的服務(wù)器

  1. ngrok-dev.mydomain.com 解析到47.101.41.231
    ngrok-dev二級域名下的子域名也需要解析到ngrok的服務(wù)器
  2. *.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
image.png

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


image.png
  1. https的證書
  2. 阿里云會提供免費的ssl證書,但是不需要去下載使用這個證書,只需要使用openssl的證書就好了


    image.png
  1. 配置ecs 機(jī)器的防火墻

  2. 查看防火墻的開啟狀態(tài)


    image.png
  3. 查看可以訪問的端口


    image.png
  4. 添加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ī)則

  5. 準(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

  1. 啟動
    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"
  1. 下載客戶端到本地
    客戶端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"
  1. 客戶端的啟動腳本
 ./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)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容