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 2048
openssl req -x509 -new -nodes -key rootCA.key -subj "/CN=ngrok.facebeek.cn" -days 5000 -out rootCA.pem
openssl genrsa -out server.key 2048
openssl req -new -key server.key -subj "/CN=ngrok.facebeek.cn" -out server.csr
openssl 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.crt
cp server.crt assets/server/tls/snakeoil.crt
cp 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服务器】【多平台】的更多相关文章

  1. Ngrok 内网穿透神器(转载)

    mac上配置web服务: http://note.rpsh.net/posts/2013/11/27/osx-10-9-apache-server-php-mysql/ Ngrok 内网穿透神器 由于 ...

  2. ngrok内网穿透神器

    ngrok类似国内的花生壳,可以将本地的内网映射到公网上,这样就可以做web开发,微信开发了.下面就介绍下ngrok是怎么配置的吧. 方式一: 一.打开ngrok的官网https://ngrok.co ...

  3. 内网穿透神器ngrok

    相信做Web开发的同学们,经常会遇到需要将本地部署的Web应用能够让公网环境直接访问到的情况,例如微信应用调试.支付宝接口调试等.这个时候,一个叫ngrok的神器可能会帮到你,它提供了一个能够在公网安 ...

  4. 内网穿透神器ngrok——将本地项目驾到外网

    相信做Web开发的同学们,经常会遇到需要将本地部署的Web应用能够让公网环境直接访问到的情况,例如微信应用调试.支付宝接口调试等.这个时候,一个叫ngrok的神器可能会帮到你,它提供了一个能够在公网安 ...

  5. 内网穿透神器ngrok(转)

    相信做Web开发的同学们,经常会遇到需要将本地部署的Web应用能够让公网环境直接访问到的情况,例如微信应用调试.支付宝接口调试等.这个时候,一个叫ngrok的神器可能会帮到你,它提供了一个能够在公网安 ...

  6. docker frps 内网穿透容器化服务

    准备 域名解析 将frp.xx.com解析到服务器ip,将泛域名 *.frp.xx.com解析到frp.xx.com即可 https证书申请 泛域名证书现在可以用acme.sh申请Let's Encr ...

  7. 手写内网穿透服务端客户端(NAT穿透)原理及实现

    Hello,I'm Shendi. 这天心血来潮,决定做一个内网穿透的软件. 用过花生壳等软件的就知道内网穿透是个啥,干嘛用的了. 我们如果有服务器(比如tomcat),实际上我们在电脑上开启了服务器 ...

  8. [svc]frp内网穿透

    什么是穿透 可以任意暴漏内网任何服务,加入你在你的办公网络有台pc,可以上网就可以了, 你可以在你电脑上安装各类服务器, 暴漏如80 22等端口, 注意 这可以暴漏到公网哦, 在出口不做任何nat情况 ...

  9. linux之frp服务部署(内网穿透)

    frp服务部署(内网穿透) 目的 更快的进行内网穿透调试以及云端开发测试 服务器为CentOS 7,客户端为win11 frp介绍 frp 是一个开源项目, 采用 C/S 模式,将服务端部署在具有公网 ...

随机推荐

  1. Java 性能分析工具 , 第 3 部分: Java Mission Control

    引言 本文为 Java 性能分析工具系列文章第三篇,这里将介绍如何使用 Java 任务控制器 Java Mission Control 深入分析 Java 应用程序的性能,为程序开发人员在使用 Jav ...

  2. 解决Native atomics support not found问题

    今天用arm-none-linux-gnueabi交叉编译libmysqclient.so,出现Native atomics support not found问题 进入mysql-connector ...

  3. javascript判断是否为闰年

    //判断年份year是否为闰年,是闰年则返回true,否则返回false function isLeapYear(year){ var a = year % 4; var b = year % 100 ...

  4. 如何获取安卓系统自带应用的package和activity

    之前在做appium自动化测试的时候,参考网上的例子,运行安卓系统自带的app,所以,就需要获取系统自带的package(包名)和activity.这里简单记录一下,不一定适合所有的系统应用. 运行环 ...

  5. JavaScript代码段整理笔记系列(二)

    上篇介绍了15个常用代码段,本篇将把剩余的15个补齐,希望对大家有所帮助!!! 16.检测Shift.Alt.Ctrl键: event.shiftKey; //检测Shift event.altKey ...

  6. 最强 Android Studio 使用小技巧和快捷键

    写在前面 本文翻译自 Android Studio Tips by Philippe Breault,一共收集了62个 Android Studio 使用小技巧和快捷键. 根据这些小技巧的使用场景,本 ...

  7. AJAX跨域调用ASP.NET MVC或者WebAPI服务的解决方案

    问题描述 当跨域(cross domain)调用ASP.NET MVC或者ASP.NET Web API编写的服务时,会发生无法访问的情况. 重现方式 使用模板创建一个最简单的ASP.NET Web ...

  8. Java程序设计之算出一年第多少天

    可以直接拷贝运行. package year; import java.util.Scanner; public class year { public static void main(String ...

  9. Lua面线对象学习

    --[[ ]] local userdata = {} local Register = {} function Register:del(key) userdata[self.namespace][ ...

  10. MikroTik RB750r2 操作记录

    1. 客户端的下载 http://www.mikrotik.com/download  下载 winbox 2. Reset重置密码的正确姿势 http://wiki.mikrotik.com/ind ...