内网穿透神器(ngrok)服务端部署【分享一台自己的ngrok服务器】【多平台】
Ngrok为何物
“ngrok 是一个反向代理,通过在公共的端点和本地运行的 Web 服务器之间建立一个安全的通道。ngrok 可捕获和分析所有通道上的流量,便于后期分析和重放。”这是百度百科上给Ngrok给出的定义。说俗点就是内网穿透,将自己电脑上的Web页面或API等穿透内网,发布到网络上。和国内有名的“花生壳”内网版相似。

调试API时,每次修改提交服务器会比较麻烦,而花生壳经常无缘无故丢我POST参数,稳定点的价格还不菲,无奈选择了Ngrok。但现在大陆地区,Ngrok的官方服务在非“科学上网”的环境下,无法正常访问。好在Ngrok开源,可以下载编译后将服务端部署到自己的服务器上,比较便捷与稳定,同时由于Ngrok采用go语言开发,编译后可到对应的平台运行,具有跨平台的特性。由于需要生成openssl证书,所以接下去编译的演示基于mac os平台,liunx下基本是一模一样的,编译生成的exe程序基于win386运行。
需要准备什么
1.一个域名 几级的无所谓,我解析了一个叫ngrok的二级域名给它,同时设置了这个二级域名下*.ngrok的泛解析。
2.一台主机 阿里云上或**云**云上的云主机都行。
如果没有这两个,那就直接看文章最后吧。正好有一台没有用的云主机,搭建了一台自己的Ngrok服务器,可以分享给大家用于测试,但为了保证稳定,不可能分享很多,先到先得。
编译
1.为mac安装go环境 这个简单,直接用homebrew安装,使用 ‘brew install go’一键安装,安装完后配置环境变量。
2.在git下载Ngrok源码 懒得clone,直接去git上下载 https://github.com/inconshreveable/ngrok 下载完成后解压到工作目录。
3.生成openssl证书 为了方便复制,先cd到刚刚的工作目录,运行下面的命令生成公钥私钥。
|
1
2
3
4
5
|
openssl genrsa -out rootCA.key 2048openssl req -x509 -new -nodes -key rootCA.key -subj "/CN=ngrok.facebeek.cn" -days 5000 -out rootCA.pemopenssl genrsa -out server.key 2048openssl req -new -key server.key -subj "/CN=ngrok.facebeek.cn" -out server.csropenssl x509 -req -in server.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out server.crt -days 5000 |
其中ngrok.facebeek.cn是我绑定的二级域名。务必替换成你自己的。
生成完成后将对应的证书复制到assets文件夹下的对应目录,替换原有的证书。如不替换,域名与证书不一致,客户端与服务端是没法正常连接的。
|
1
2
3
|
cp rootCA.pem assets/client/tls/ngrokroot.crtcp server.crt assets/server/tls/snakeoil.crtcp server.key assets/server/tls/snakeoil.key |
4.修改log下的logger.go go编译时会下载对应依赖项,如果依赖了code.google.com下的,你懂的。这里将ngrok/src/ngrok/log/logger.go中的第四行更改为“github.com/keepeye/log4go”,如果源码中已经是github的地址,那就不用更改了。
5.编译服务端与客户端 由于go语言的特性,在编译时直接生成机器码,所以在运行过程中并不需要go的环境。在ngrok目录下,运行一下命令分别生成对应的客户端/服务端。
|
1
2
3
4
5
6
7
8
|
#win服务端GOOS=windows GOARCH=386 make release-server#win客户端GOOS=windows GOARCH=386 make release-client#linux服务端GOOS=linux GOARCH=386 make release-server#linux客户端GOOS=linux GOARCH=386 make release-client |
生成完成后,在工作目录的bin文件夹下,产生对应的文件。以编译win平台为例,会产生“ngrok.exe”与“ngrokd.exe”这两个文件,前者客户端,后者需要运行在服务器上。
服务器端部署
将ngrokd.exe复制到服务器上,偷懒写个bat
|
1
|
C:\ngrokd.exe -domain="ngrok.facebeek.cn" -httpAddr=":801" -httpsAddr=":802" -tunnelAddr=":4443" |
如上,将ngrokd.exe放至c盘根目录上,绑定的域名换成自己的域名,http使用801端口,https使用802端口,供客户端连接的管道端口设置为4443端口。
运行bat,得到下图,说明运行正常。

客户端连接
将ngrok.exe复制至客户端,创建ngrok.cfg配置文件
|
1
2
|
server_addr: "ngrok.facebeek.cn:4443"trust_host_root_certs: false |
将server_addr替换为对应的地址。
偷懒再写个bat,其中指定配置文件,使用的域名前缀为test,映射本地的80端口。以我的配置为例,当用户访问test.ngrok.facebeek.cn域名时,将会显示本机80端口所显示的内容。
|
1
|
D:\ngrok\ngrok.exe -config=./ngrok.cfg -subdomain=test 80 |
运行bat,得到下图,表示连接正常。
连接成功后,在浏览器中输入test.facebeek.cn:801,可以正常访问。
大体上Ngrok的服务已经可以开始使用了。
IIS的URL重写
由于服务器上同时运行着IIS,故服务端Ngrok启动时无法使用80端口,所以在上面,我使用了801作为Ngrok服务器的http端口,但在上图中,我并没有在URL后添加801端口,因此在这里,我使用了IIS的代理功能。在调试开发微信等必须使用80端口的应用时,这一点很有必要。
首先需要为IIS安装ARR,下载地址(http://www.iis.net/downloads/microsoft/application-request-routing)。
安装完成后,开启ARR,如下图。



创建网站,绑定信息如下,由于IIS不支持*.XXX.XXX.cn这类格式,所以为了泛解析只能绑定*。

选择URL重写。

添加规则,用正则表达式匹配URL,模式^(.*),表示匹配任意URL,在下方添加一条匹配条件,条件输入填写{HTTP_HOST},模式填写如下,表示后匹配“.ngrok.facebeek.cn”的域名。添加重写规则为http://{C:0}:801/{R:1}。如下图



经过以上的操作,可以将80端口上的请求重写到801端口上,完成反向代理。
最后分享台我部署好的Ngrok服务器
未了保证原系统的稳定,暂时不分享新的Ngrok用户,见谅
转载请注明出处 huhuhuo的博客园
地址:http://www.cnblogs.com/linhan/p/5440790.html
内网穿透神器(ngrok)服务端部署【分享一台自己的ngrok服务器】【多平台】的更多相关文章
- Ngrok 内网穿透神器(转载)
mac上配置web服务: http://note.rpsh.net/posts/2013/11/27/osx-10-9-apache-server-php-mysql/ Ngrok 内网穿透神器 由于 ...
- ngrok内网穿透神器
ngrok类似国内的花生壳,可以将本地的内网映射到公网上,这样就可以做web开发,微信开发了.下面就介绍下ngrok是怎么配置的吧. 方式一: 一.打开ngrok的官网https://ngrok.co ...
- 内网穿透神器ngrok
相信做Web开发的同学们,经常会遇到需要将本地部署的Web应用能够让公网环境直接访问到的情况,例如微信应用调试.支付宝接口调试等.这个时候,一个叫ngrok的神器可能会帮到你,它提供了一个能够在公网安 ...
- 内网穿透神器ngrok——将本地项目驾到外网
相信做Web开发的同学们,经常会遇到需要将本地部署的Web应用能够让公网环境直接访问到的情况,例如微信应用调试.支付宝接口调试等.这个时候,一个叫ngrok的神器可能会帮到你,它提供了一个能够在公网安 ...
- 内网穿透神器ngrok(转)
相信做Web开发的同学们,经常会遇到需要将本地部署的Web应用能够让公网环境直接访问到的情况,例如微信应用调试.支付宝接口调试等.这个时候,一个叫ngrok的神器可能会帮到你,它提供了一个能够在公网安 ...
- docker frps 内网穿透容器化服务
准备 域名解析 将frp.xx.com解析到服务器ip,将泛域名 *.frp.xx.com解析到frp.xx.com即可 https证书申请 泛域名证书现在可以用acme.sh申请Let's Encr ...
- 手写内网穿透服务端客户端(NAT穿透)原理及实现
Hello,I'm Shendi. 这天心血来潮,决定做一个内网穿透的软件. 用过花生壳等软件的就知道内网穿透是个啥,干嘛用的了. 我们如果有服务器(比如tomcat),实际上我们在电脑上开启了服务器 ...
- [svc]frp内网穿透
什么是穿透 可以任意暴漏内网任何服务,加入你在你的办公网络有台pc,可以上网就可以了, 你可以在你电脑上安装各类服务器, 暴漏如80 22等端口, 注意 这可以暴漏到公网哦, 在出口不做任何nat情况 ...
- linux之frp服务部署(内网穿透)
frp服务部署(内网穿透) 目的 更快的进行内网穿透调试以及云端开发测试 服务器为CentOS 7,客户端为win11 frp介绍 frp 是一个开源项目, 采用 C/S 模式,将服务端部署在具有公网 ...
随机推荐
- Appfuse:记录操作日志
appfuse的数据维护操作都发生在***form页面,与之对应的是***FormController,在Controller中处理数据的操作是onSubmit方法,既然所有的操作都通过onSubmi ...
- 批处理bat 命令
1.批处理常用符号: - echo 打开回显或关闭请求回显功能,或显示消息.如果没有任何参数,echo 命令将显示当前回显设置 语法:@echo [{ on|off }] echo{"显示 ...
- vs2013 git 使用总结
一.参与别人已经建好的项目 方法1.打开VS2013,切换到“团队资源管理器”,点上方“主页”右侧的下拉三角,选择项目->连接到团队项目,然后选择“克隆”,填入Git的Remote Url和要克 ...
- 数据库实战案例—————记一次TempDB暴增的问题排查
前言 很多时候数据库的TempDB.日志等文件的暴增可能导致磁盘空间被占满,如果日常配置不到位,往往会导致数据库故障,业务被迫中断. 这种文件暴增很难排查,经验不足的一些运维人员可能更是无法排查具体原 ...
- Mac MySQL启动不了解决办法(MySQL卸载重新安装教程)
一段时间没用MySQL,今天使用时突然发现启动不了了,怎么点start都没用,或者输入密码了 还是没用... 好急...找了一圈资料,没发现特别好的解决办法,只能使用大招了----->< ...
- linux基本知识2
date:时间管理 linux时钟: 硬件时钟:hwclock -s:硬件时钟到系统时钟 -w:系统时钟到硬件时钟 系统时钟:date 如何查看是外部命令还是内部命令: type COMMAND ...
- Yahoo14条军规-前端性能优化
1.尽可能减少HTTP请求数 什么是http请求? 2.使用CDN(内容分发网络) 什么是CDN? 3.添加Expire/Cache-Control头 Expire Cache-Control 4.启 ...
- Lite Your Android English
https://litesuits.com/ 一些话 简约的背后,往往是复杂 还原面向对象应有的体验,让应对繁多业务所增加的,并未增加. 展开设计理念 Lite每个项目仅几十KB,这相当于你项目中 ...
- 配置VSCode右键菜单
修改注册表,添加鼠标右键 选择文件 Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\*\shell\VSCode]@="Ope ...
- [LeetCode] Create Maximum Number 创建最大数
Given two arrays of length m and n with digits 0-9 representing two numbers. Create the maximum numb ...