NGROK內⽹穿透實現本地微信公眾號開發

  • 2019 年 12 月 17 日
  • 筆記

NGROK介紹

  • Ngrok 是一個反向代理,通過在公告網路和本地埠之間建立一個安全的通道。
  • 實現條件必須有一台外網IP的伺服器。

安裝環境

安裝go語言

go語言版本必須是1.1的版本,可以去https://studygolang.com/dl 下載,下載tar.gz之後解壓

wget https://dl.google.com/go/go1.11.linux-amd64.tar.gz # 下載go語言  tar -zxvf go1.11.linux-amd64.tar.gz #解壓tar包  mv go /usr/local/ #移動go語言或直接ln軟連接到系統默認可執行程式目錄bin
#修改系統變數配置⽂件  # /etc/profile,/etc/bashrc 是系統全局環境變數設定  # ~/.profile,~/.bashrc⽤戶家目錄下的私有環境變數設定  # windows,在"我的電腦"上右擊選擇屬性 ->系統->高級系統設置->系統屬性->高級->環境變數  vi /etc/profile  export GOROOT=/usr/local/go  export GOPATH=/usr/local/go/get_package #設置環境變數,Go語言的安裝位置  export NGROK_DOMAIN="your.cn" #設置環境變數,ngrok域名  export PATH=.:$GOROOT/bin:•$PATH  source /etc/profile #刷新配置

安裝NGROK

源碼地址:https://github.com/inconshreveable/ngrok

git clone https://github.com/inconshreveable/ngrok

生成證書

進入到第一步下載的ngrok源碼根目錄,執行以下命令,會在當前文件夾生成六個文件

openssl genrsa -out rootCA.key 2048 #創建根證書  openssl req -x509 -new -nodes -key rootCA.key -subj "/CN=$NGROK_DOMAIN" -days 3650 -out rootCA.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 rootCA.pem -CAkey rootCA.key -CAcreateserial -out server.crt -days 3650  #windows 生成證書可以使用 https://gitforwindows.org/ git BASH 自帶openssl工具

複製證書

cp rootCA.pem assets/client/tls/ngrokroot.crt #客戶端證書  cp server.crt assets/server/tls/snakeoil.crt #服務端證書  cp server.key assets/server/tls/snakeoil.key #服務端公鑰

編譯

在下載的ngrok根目錄編譯

make release-server #創建服務端程式  make release-client #創建客戶端程式  #Linux 平台32位系統:  GOOS=linux GOARCH=386 make release-server release-client  #Linux 平台64位系統:  GOOS=linux GOARCH=amd64 make release-server release-client  # Windows 平台32位系統:  GOOS=windows GOARCH=386 make release-server release-client  #Windows 平台64位系統:  GOOS=windows GOARCH=amd64 make release-server release-client  #MAC 平台32位系統:  GOOS=darwin GOARCH=386 make release-server release-client  #MAC 平台64位系統:  GOOS=darwin GOARCH=amd64 make release-server release-client  # ngrok/bin⾥⾯⽣成ngrok文件  # ngrok/bin/ngrokd 伺服器端  # ngrok/bin/$GOOS/ngrok 客戶端

啟動ngrok服務端

/usr/local/bin/ngrokd -domain=you.cn -httpAddr=:80 -httpsAddr=:8081

啟動ngrok客戶端

./ngrok -config=.ngrok.conf start-all

客戶端配置⽂件

server_addr: you.cn:4443  trust_host_root_certs: false  tunnels:       docker: #別名       subdomain: "local" #定義伺服器分配域名前綴       proto:       http: 8081 #映射端⼝,不加ip默認本機       front:       subdomain: "front"       proto:       http: 8080

nginx 代理設置

server {   listen 80;   server_name you.cn *.you.cn;   access_log /data/wwwlogs/you.cn_nginx.log combined;   index index.html index.htm index.php;   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;         proxy_set_header X-Nginx-Proxy true;         proxy_pass http://127.0.0.1:8080; # 此處埠要跟 啟動服務  端ngrok 時指定的埠⼀致         client_max_body_size 10M;         proxy_set_header Upgrade $http_upgrade;         proxy_set_header Connection "upgrade";       }  }