ngrok+nginx实现内网穿透
写在前面: 前天在qq群里看到有人在讨论替代花生壳的工具,说到了ngrok,说是可以实现花生壳一样的内网穿透,个人认为主要有以下几个用处: 可以在公司测试服务器上搭建一个服务,实现测试站点的本地访问(公网访问本地服务器),在这之前通常是上传网站到服务器并解析一个子域名,相对比较费时 微信接口开发的时候优势更明显,因为微信的OAuth一类认证需要一个公网域名且端口必须是80/443(也是本文需要用到nginx做反向代理的原因之一) 欢迎补充… ngrok1.x介绍(2.x没有开源官网) ngrok1.x源码github地址 如上封面图所示 橘色屏幕的笔记本是你的工作机器,安装了ngrok客户端 ngrok.com所在的服务器安装了ngrok的服务端(ngrokd) 利用ngrok 8080命令可以将你本机的8080端口暴露给反向代理至ngrok.com的某个二级域名如:.ngrok.com 公网用户可以通过.ngrok.com就可以访问你本机8080端口上的站点内容了。 由此可见,借助ngrok,可以解决web项目(尤其是微信接口相关)开发过程经常遇到的“本地开发,外网调试”问题。 先决条件 有一个域名,并解析到自己服务器上,如:*.ngrok.lestat.me 有一个具备固定ip的公网服务器 部署 基本步骤:安装go环境->下载ngrok源码->使用go编译ngrok以及相关环境变量的设置->证书配置->运行ngrok服务器端并指定监听的http/https端口->nginx配置文件中对上一步中相关端口做反向代理配置->重启nginx->生成对应OS(linux,darwin,windows)的客户端->本地机器下载上一步生成的客户端->本地新建配置文件ngrok.cfg->本地运行客户端并指定配置文件->出现online则说明穿透成功 一个例子 数据准备 本机地址 IP:127.0.0.1,HTTP 为 80 外网地址 IP:45.77.14.6,HTTP 为 80(NGINX监听该端口,并对*.ngrok.lestat.me域名进行转发到服务器的60端口) 域名为:http://*.ngrok.lestat.me 预期结果 外网访问 http://*.ngrok.lestat.me可以访问到本机上80端口提供的网站 下文按照前面的例子来搭建 Go环境的安装 下载并解压GOLANG wget -c https://storage.googleapis.com/golang/go1.8.3.linux-amd64.tar.gz tar -C /usr/local -zxvf go1.8.3.linux-amd64.tar.gz 设置相关环境变量 export GOROOT=/usr/local/go export PATH=$PATH:$GOROOT/bin export GOPATH=$HOME/go export GOROOT_BOOTSTRAP=/usr/local/go 检查安装是否成功 go version 安装ngrok 下载并配置参数 cd /usr/local/ git clone https://github.com/inconshreveable/ngrok.git export GOPATH=/usr/local/ngrok/ export NGROK_DOMAIN="ngrok.lestat.me" cd ngrok 生成证书 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 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 5000 将源码下的证书复制到指定位置 cp rootCA.pem assets/client/tls/ngrokroot.crt cp server.crt assets/server/tls/snakeoil.crt cp server.key assets/server/tls/snakeoil.key 编译服务器&客户端(linux64位),如果是32位系统则是amd386 cd /usr/local/go/src GOOS=linux GOARCH=amd64 ./make.bash cd /usr/local/ngrok/ GOOS=linux GOARCH=amd64 make release-server release-client 编译Mac64位客户端 ...