一、前言
ngrok 是一个反向代理,通过在公共的端点和本地运行的 Web 服务器之间建立一个安全的通道。
简单理解就是可以实现内网穿透到公网。
二、准备
1台云服务器或者vps+一个域名
三、开搞
1.安装go语言
1 | //请下载合适自己的go语言包 我是centos 7 64位 所以选择以下包 |
2.下载ngrok源码并编译
1 | mkdir /ngrok |
3.域名解析
解析一个二级域名作为你的ngrok客户端访问的域名,记录类型为A记录,记录值ngrok,ip为你的服务器ip。
4.给你的域名生成证书
在ngrok根目录下执行以下命令生成证书
1 | cd /ngrok |
然后执行覆盖命令
1 | yes|cp rootCA.pem assets/client/tls/ngrokroot.crt |
5.编译服务端ngrokd
#编译ngrokd(服务器端)
make release-server
编译结束后会在ngrok/bin目录下生成一个ngrokd文件,这个文件就是服务器端启动的程序。
6.编译客户端ngrok
当服务器端ngrok启动后,在客户端,也就是window下的需要内网穿透场景的地方也需要一个启动程序来启动。
我客户端电脑是window64位的,所以命令就是GOOS=windows GOARCH=amd64 make release-client
编译成功后会在ngrok/bin/windows_amd64/目录下面有ngrok.exe,把这个exe文件下载到你的客户端电脑中。
#Linux 平台 32 位系统:
GOOS=linux GOARCH=386 make release-client
#Linux 平台 64 位系统:
GOOS=linux GOARCH=amd64 make release-client
#Windows 平台 32 位系统:
GOOS=windows GOARCH=386 make release-client
#Windows 平台 64 位系统:
GOOS=windows GOARCH=amd64 make release-client
#MAC 平台 32 位系统:
GOOS=darwin GOARCH=386 make release-client
#MAC 平台 64 位系统:
GOOS=darwin GOARCH=amd64 make release-client
#ARM 平台:
GOOS=linux GOARCH=arm make release-client
7.启动服务端ngrokd
/bin/ngrokd -tlsKey="assets/server/tls/snakeoil.key" -tlsCrt="assets/server/tls/snakeoil.crt" -domain="myngrok.com" -httpAddr=":9000" -httpsAddr=":9001" -tunnelAddr=":4443"
#参数说明:
#-domain 访问ngrok是所设置的服务地址生成证书时那个
#-httpAddr http协议端口 默认为80
#-httpsAddr https协议端口 默认为443 (可配置https证书)
#-tunnelAddr 通道端口 默认4443
8.内网穿透实例
1.在window里启动一个localhost:4000的hexo博客应用程序。
2.从服务器上下载ngrok.exe客户端程序,然后创建一个ngrok文件夹,在里面新建一个ngrok.cfg文件并写入以下内容
1 | server_addr: "ngrok.inner.ink:4443" |
3.启动内网穿透ngrok.exe
打开cmd,然后在ngrok这个目录下输入ngrok -config=ngrok.cfg -subdomain=shmh 4000
按回车运行
4.在浏览器中访问shmh.ngrok.inner.ink:9000
可以看到我的博客已经被访问了,而且ngrok客服端中也会有GET报文出现。
5.配置deploy.bat文件方便启动
1 | @echo OFF |