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
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"; } }