ngrok搭建_搭建ngrok - CSDN
精华内容
参与话题
  • 说在前面的话 看到这篇文章的童鞋们,恭喜你们已经学会了自己解决问题,学会了自己思考,在我们遇到困难的时候,并没有放弃,...那么我们来看看ngrok主要的用处 ngrok的用处 话不多说,先来谈谈我们为什么会用到ngrok, ...

    说在前面的话

    看到这篇文章的童鞋们,恭喜你们已经学会了自己解决问题,学会了自己思考,在我们遇到困难的时候,并没有放弃,而是坚持的去寻找我们自己的答案。,之前小锋也一直在使用免费的,但是免费的有时候很卡,卡的受不了,因此就想着自己搭建一个. 为了让童鞋们方便观看,小锋故意把xshell的文字效果调的更渲染一些,此处应该有掌声 那么我们来看看ngrok主要的用处

    1、ngrok的用处

    话不多说,先来谈谈我们为什么会用到ngrok,因为在日常生活中我们必须要用到80端口,比如微信公众号开发,就必须使用80端口.

    2、谈谈ngrok搭建的必要条件

    1. 我们要有公网ip地址,而且我们有的公网ip地址必须有一个防火墙或者是路由器(服务器策略转发使用),小锋的公司正好有公网ip,而且也可以做端口映射
      温馨提示:如果你想要搭建ngrok,提供微信公众号服务的话,该公网IP必须要开放80端口才可以,当然如果你使用的是云服务器,当然就没问题了,但是云服务器必须开放80、4443端口
      .如图:
      在这里插入图片描述
      在这里插入图片描述
      共转发了两个端口,一个是80端口,一个是4443端口.
    2. 还有一个条件也就是域名.有了域名我们才可以把域名的解析添加到服务器的ip地址上.

    3、搭建的部署文件

    本次搭建ngrok需要用到的文件包含go环境、git环境、ngrok文件。
    下载地址:(若使用该文件,则可直接上传到linux服务器上,省事省心,若不使用,也可以通过wget等方式下载源码)
    在这里插入图片描述
    下载地址:
    go环境的搭建(传送口)

    git环境的搭建(传送口)

    搭建好了go环境以及git环境了测试一下,这里git版本尽量高一些,最好都和我一致。

    root@localhost:/# go version
    go version go1.7 linux/amd64
    root@localhost:/# git --version
    git version 2.13.2
    root@localhost:/# 
    

    在这里插入图片描述
    在这里插入图片描述

    然后再把ngrok文件夹上传到linux服务器上(我的目录是==/usr/local/ngrok==),你们的最好也是这样的。
    在这里插入图片描述
    好了,到这里环境基本上都搭建好了,接下来开始进入正题了

    4、安装自定义秘钥

    注意:
    bw.xiaofeng.cn是一个base域名,也就是一个父域名,当我们用这个域名的时候,生成的域名是xx.bw.xiaofeng.cn,其中的xx是客户端,用户自定义的.(当然也可以随机产生)

    还有这里命令的目录都是ngrok安装的所在目录(比如我的/usr/local/ngrok)

    同时在这里也说一下为什么要自定义秘钥,(因为它收费,需要自己买)这里的秘钥是为了保证服务端和客户端连接的安全性,只有使用该秘钥产生的客服端才可以连接服务端,否则都白搭.

    #为base域名bw.xiaofeng.cn生成证书
    openssl genrsa -out rootCA.key 2048
    openssl req -x509 -new -nodes -key rootCA.key -subj "/CN=bw.xiaofeng.cn" -days 5000 -out rootCA.pem
    openssl genrsa -out device.key 2048
    openssl req -new -key device.key -subj "/CN=bw.xiaofeng.cn" -out device.csr
    openssl x509 -req -in device.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out device.crt -days 5000
    

    上面的生成证书时间不长,很快我们就生成完了,
    执行完上述命令,正常情况下,会多出device.crt、device.csr、device.key、rootCA.key、rootCA.pem、rootCA.srl六个文件,用它们来替换默认的证书文件即可。默认的证书文件在“./assets/client/tls”和“./assets/server/tls/”目录中
    下面看一下生成完之后的截图

    root@localhost:~# cd /usr/local/ngrok/
    root@localhost:/usr/local/ngrok# ll
    total 64
    drwxr-xr-x. 4 root root 4096 May 24 15:55 assets
    drwxr-xr-x. 4 root root 4096 May 24 17:05 bin
    drwxr-xr-x. 2 root root 4096 May 24 15:55 contrib
    -rw-r--r--. 1 root root  199 May 24 15:55 CONTRIBUTORS
    -rw-r--r--. 1 root root  997 May 24 15:58 device.crt
    -rw-r--r--. 1 root root  899 May 24 15:58 device.csr
    -rw-r--r--. 1 root root 1679 May 24 15:58 device.key
    drwxr-xr-x. 2 root root 4096 May 24 15:55 docs
    -rw-r--r--. 1 root root  551 May 24 15:55 LICENSE
    -rw-r--r--. 1 root root 1433 May 24 15:55 Makefile
    drwxr-xr-x. 4 root root 4096 May 24 16:49 pkg
    -rw-r--r--. 1 root root 2725 May 24 15:55 README.md
    -rw-r--r--. 1 root root 1675 May 24 15:57 rootCA.key
    -rw-r--r--. 1 root root 1115 May 24 15:58 rootCA.pem
    -rw-r--r--. 1 root root   17 May 24 15:58 rootCA.srl
    drwxr-xr-x. 5 root root 4096 May 24 16:05 src
    root@localhost:/usr/local/ngrok# 
    
    

    在这里插入图片描述
    然后我们再把ngrok自带的秘钥替换成我们刚刚生成的秘钥,
    命令:
    执行命令的目录就是ngrok的所在目录(比如我的/usr/local/ngrok)

    cp rootCA.pem assets/client/tls/ngrokroot.crt
    cp device.crt assets/server/tls/snakeoil.crt 
    cp device.key assets/server/tls/snakeoil.key
    

    注意:
    执行上面的命令时,每执行一行命令都会提示是否要覆盖该文件,这里必须要选择是,也就是在控制台上打 y,否则客户端是连接不上服务端的,显示秘钥证书错误.这里很多人都进坑了,所以着重说一下

    5、生成客户端和服务端

    因为我们的客户端的文件(ngrok)需要和服务端(ngrokd)一一对应,保证秘钥证书的正确性,因此这里的客户端和服务端都需要自己生成。

    开始编译

    elease-server是指生成linux服务端文件(ngrokd)
    release-client是指生成linux客户端文件(ngrok)
    这里是同时生成两个(执行目录ngrok的安装目录)

    make release-server release-client
    

    接下来它会使用到go命令和git命令,如果你这里环境没有安装好,则是报错的.这里编译的速度很慢,一般会根据计算机的执行速度以及网络的速度来看的,所以这里我们可以喝杯茶,慢慢的等会就好啦
    下面是执行成功的过程:

    GOOS="" GOARCH="" go get github.com/jteeuwen/go-bindata/go-bindata
    bin/go-bindata -nomemcopy -pkg=assets -tags=release \
    	-debug=false \
    	-o=src/ngrok/client/assets/assets_release.go \
    	assets/client/...
    bin/go-bindata -nomemcopy -pkg=assets -tags=release \
    	-debug=false \
    	-o=src/ngrok/server/assets/assets_release.go \
    	assets/server/...
    go get -tags 'release' -d -v ngrok/...
    github.com/inconshreveable/mousetrap (download)
    github.com/rcrowley/go-metrics (download)
    Fetching https://gopkg.in/inconshreveable/go-update.v0?go-get=1
    Parsing meta tags from https://gopkg.in/inconshreveable/go-update.v0?go-get=1 (status code 200)
    get "gopkg.in/inconshreveable/go-update.v0": found meta tag main.metaImport{Prefix:"gopkg.in/inconshreveable/go-update.v0", VCS:"git", RepoRoot:"https://gopkg.in/inconshreveable/go-update.v0"} at https://gopkg.in/inconshreveable/go-update.v0?go-get=1
    gopkg.in/inconshreveable/go-update.v0 (download)
    github.com/kardianos/osext (download)
    github.com/kr/binarydist (download)
    Fetching https://gopkg.in/inconshreveable/go-update.v0/check?go-get=1
    Parsing meta tags from https://gopkg.in/inconshreveable/go-update.v0/check?go-get=1 (status code 200)
    get "gopkg.in/inconshreveable/go-update.v0/check": found meta tag main.metaImport{Prefix:"gopkg.in/inconshreveable/go-update.v0", VCS:"git", RepoRoot:"https://gopkg.in/inconshreveable/go-update.v0"} at https://gopkg.in/inconshreveable/go-update.v0/check?go-get=1
    get "gopkg.in/inconshreveable/go-update.v0/check": verifying non-authoritative meta tag
    Fetching https://gopkg.in/inconshreveable/go-update.v0?go-get=1
    Parsing meta tags from https://gopkg.in/inconshreveable/go-update.v0?go-get=1 (status code 200)
    Fetching https://gopkg.in/yaml.v1?go-get=1
    Parsing meta tags from https://gopkg.in/yaml.v1?go-get=1 (status code 200)
    get "gopkg.in/yaml.v1": found meta tag main.metaImport{Prefix:"gopkg.in/yaml.v1", VCS:"git", RepoRoot:"https://gopkg.in/yaml.v1"} at https://gopkg.in/yaml.v1?go-get=1
    gopkg.in/yaml.v1 (download)
    github.com/inconshreveable/go-vhost (download)
    github.com/alecthomas/log4go (download)
    github.com/nsf/termbox-go (download)
    github.com/mattn/go-runewidth (download)
    github.com/gorilla/websocket (download)
    go install -tags 'release' ngrok/main/ngrokd
    

    如果你也执行到这一步了,首先要恭喜你.你已经成功了一大步了,接下来胜利在望了.
    测试运行一下
    接下来是运行服务端的代码
    ./bin/ngrokd 表示启动
    -httpAddr:表示开放的端口号为80端口
    -domain=“bw.xiaofeng.cn”,表示访问的域名是bw.xiaofeng.cn
    当然这里我还可以配置其他的端口,比如默认的4443端口

    root@localhost:/usr/local/ngrok# ./bin/ngrokd -domain="bw.xiaofeng.cn" -httpAddr=":80"
    

    运行完上面的命令之后,会显示下面的命令,
    这里会看到默认会启动4443端口,这里就和刚开始我们再防火墙配置暴露4443端口是对应的

    [09:54:20 CST 2019/05/27] [INFO] (ngrok/log.(*PrefixLogger).Info:83) [registry] [tun] No affinity cache specified
    [09:54:20 CST 2019/05/27] [INFO] (ngrok/log.(*PrefixLogger).Info:83) [metrics] Reporting every 30 seconds
    [09:54:20 CST 2019/05/27] [INFO] (ngrok/log.Info:112) Listening for public http connections on [::]:80
    [09:54:20 CST 2019/05/27] [INFO] (ngrok/log.Info:112) Listening for public https connections on [::]:443
    [09:54:20 CST 2019/05/27] [INFO] (ngrok/log.Info:112) Listening for control and proxy connections on [::]:4443
    

    启动后每隔一段时间会再屏幕上显示客服端的连接数(包含linux,windows等客户端),如图:

    [09:54:50 CST 2019/05/27] [INFO] (ngrok/log.(*PrefixLogger).Info:83) [metrics] Reporting: {"bytesIn.count":0,"bytesOut.count":0,"connMeter.count":0,"connMeter.m1":0,"httpTunnelMeter.count":0,"linux":0,"osx":0,"other":0,"tcpTunnelMeter.count":0,"tunnelMeter.count":0,"tunnelMeter.m1":0,"windows":0}
    [09:55:20 CST 2019/05/27] [INFO] (ngrok/log.(*PrefixLogger).Info:83) [metrics] Reporting: {"bytesIn.count":0,"bytesOut.count":0,"connMeter.count":0,"connMeter.m1":0,"httpTunnelMeter.count":0,"linux":0,"osx":0,"other":0,"tcpTunnelMeter.count":0,"tunnelMeter.count":0,"tunnelMeter.m1":0,"windows":0}
    [09:55:50 CST 2019/05/27] [INFO] (ngrok/log.(*PrefixLogger).Info:83) [metrics] Reporting: {"bytesIn.count":0,"bytesOut.count":0,"connMeter.count":0,"connMeter.m1":0,"httpTunnelMeter.count":0,"linux":0,"osx":0,"other":0,"tcpTunnelMeter.count":0,"tunnelMeter.count":0,"tunnelMeter.m1":0,"windows":0}
    [09:56:20 CST 2019/05/27] [INFO] (ngrok/log.(*PrefixLogger).Info:83) [metrics] Reporting: {"bytesIn.count":0,"bytesOut.count":0,"connMeter.count":0,"connMeter.m1":0,"httpTunnelMeter.count":0,"linux":0,"osx":0,"other":0,"tcpTunnelMeter.count":0,"tunnelMeter.count":0,"tunnelMeter.m1":0,"windows":0}
    [09:56:50 CST 2019/05/27] [INFO] (ngrok/log.(*PrefixLogger).Info:83) [metrics] Reporting: {"bytesIn.count":0,"bytesOut.count":0,"connMeter.count":0,"connMeter.m1":0,"httpTunnelMeter.count":0,"linux":0,"osx":0,"other":0,"tcpTunnelMeter.count":0,"tunnelMeter.count":0,"tunnelMeter.m1":0,"windows":0}
    [09:57:20 CST 2019/05/27] [INFO] (ngrok/log.(*PrefixLogger).Info:83) [metrics] Reporting: {"bytesIn.count":0,"bytesOut.count":0,"connMeter.count":0,"connMeter.m1":0,"httpTunnelMeter.count":0,"linux":0,"osx":0,"other":0,"tcpTunnelMeter.count":0,"tunnelMeter.count":0,"tunnelMeter.m1":0,"windows":0}
    
    

    在这里插入图片描述
    图片里所示,目前没有客户端连接.因此都是0.
    crtl+C 取消运行
    这里我们的启动都是在命令行中启动的,一旦我们关闭窗口,就会导致服务关闭,这我们是不能接受的,因此我们需要开启后台运行(开机自启),这里考虑篇幅问题,也另外开一个博客单独说,飞机票前往---------------------------------------后台运行(开机自启)

    我们在刚刚编译的时候生成了linux的客户端(ngrok)和linux的服务端(ngrokd),我们只执行了linux的服务端,但是客户端并没有执行,其实linux的客户端和windows的客户端执行都差不多,因为我们在客户端用的比较多,因此这里主要先介绍windows的客户端连接.(如果大家对linux的客户端有兴趣,欢迎评论区留言,如果人多的话,我会继续发布新的帖子,详情关注 拉风的小锋).

    6、windows客户端连接

    之前我们生成了linux的客服端,但是呢,windows的我们并没有生成,所以我们首先先生成windows的版本(其中包含32位 64位,也有mac版本的)

    windows平台生成:

    #执行如下命令编译Windows 64位客户端
    GOOS=windows GOARCH=amd64 make release-client
    #以上GOARCH=amd64指的是编译为64位版本,如需32位改成GOARCH=386即可
    

    mac平台生成:

    #切换到ngrok目录
    #mac平台下的64位环境
    GOOS=darwin GOARCH=amd64 make release-client
    

    生成完之后我们会再norok的bin目录下发现 windows_amd64(我生成的是64位的)
    如图:
    在这里插入图片描述

    7、运行

    我们需要先把bin目录下的windows_amd64,拷贝到windows电脑上,
    然后我们老样子,启动服务端(当前目录/usr/local/ngrok)
    命令:

    root@localhost:/usr/local/ngrok# ./bin/ngrokd -domain="bw.xiaofeng.cn" -httpAddr=":80"
    

    这样我们服务端只要和上面测试时一样就不用管了,
    画面切换到客户端(windows64位操作系统)

    客户端配置文件
    在ngrok.exe所在目录下建立文件ngrok.cfg,用记事本等文本编辑器写入以下内容并保存。

    server_addr: "bw.xiaofeng.cn:4443"
    trust_host_root_certs: false
    

    建立一个log文件夹(方便查看log日志)
    最后再建立一个批处理文件:start.bat,把下面的命令填入其中
    -config=ngrok.cfg 读取配置文件
    -log=log/ngrok.log 生成日志文件
    -subdomain=xiaofeng 域名前缀,
    80 当前客户端的端口为80端口

    ngrok -config=ngrok.cfg -log=log/ngrok.log -subdomain=xiaofeng 80
    

    以上的配置若执行成功,域名为:xiaofeng.bw.xiaofeng.cn
    如图:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    保存配置,然后我们双击start.bat文件.
    在这里插入图片描述
    看到这个我们是不是有一种欣喜若狂的感觉_.哈哈,我也是呢
    然后我们看看服务端的截图
    在这里插入图片描述
    可以看到服务端接收到来自区域网192.168.100.200:53873的连接,然后连接成功.最后会显示总连接数是2个,windows2个.

    如果大家对我的文章感兴趣的话,应该关注拉风的小锋,小锋会大量给大家发点干货福利等.

    7、坑

    1、首先端口是否开放以及转发4443以及80端口
    2、域名的二级域名和三级域名是否都转发到服务器的公网ip地址上
    比如bw.xiaofeng.cn和*.bw.xiaofeng.cn都需要转发
    3、证书生成后是否替换成功,证书生成时,域名填写是否正确?
    4、启动服务端时的命令是否写错,导致域名错误
    5、客户端启动后,如果没连接成功,不要着急。先查看log日志,查看是证书错误还是说是连接不上服务端。上面的错误一般都包含了,因此我们在搭建的时候一定要小心,一步错,步步错。小心使得万年船。

    8、总结

    之前我一直以为搭建ngrok的服务端是为了解决80端口不能使用的问题,但是后来我才发现,你搭建ngrok的服务端的前提是必须要有公网ip,这一点小锋已经达到了,但是小锋的需求是用80端口,所以服务端ip的80端口也是要开放的,这一点小锋琢磨了好久,可是又有小伙伴说了,我就是因为没有80端口才想用ngrok的,你现在又说服务端必须开放80端口,这是什么意思呢,这个其实说的应该是客户端,当服务端开启80端口后,ngrok服务端监听80端口,当有访问的域名和你申请的域名一样的时候,ngrok服务端会将请求转发给保持长连接的客户端。然后就相当于访问客户端的网站。从而达到了内网共享的功能

    9、附加nginx+ngrok配置文件

    这里nginx的安装就不说了,大家百度就行,也可以参考我的博客 ,在我的专栏里可以找到

    nginx配置文件:

    worker_processes  1;
    pid    /usr/local/nginx/pid/nginx.pid;
    events {
        worker_connections  1024;
    }
    
    http {
        include       mime.types;
        default_type  application/octet-stream;
    
      
    
        sendfile        on;
       
        keepalive_timeout  65;
    
      server {
           listen 80;
            server_name *.bw.xiaofeng88.cn;
            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:88;
                            proxy_set_header X-Nginx-Proxy true;
                            proxy_set_header Connection "";
                            proxy_pass      http://127.0.0.1:88;
            }
    		
    		 #解决配置反向代理后js css文件无法加载问题 
          location ~ .*\.(js|css)$ {            
                proxy_pass http://127.0.0.1:88; #此处二级域名可以随意填写
                proxy_set_header Host $host:88;  # 这个是重点,$host 指的是与server_name相同的域名
             }
     
        }
    }
    
    
    展开全文
  • ngrok服务搭建

    2018-11-20 17:10:39
    1,安装gcc(编译器套件) [root@192 /]# yum install gcc ...3,安装go语言环境(因为ngrok的运行环境需要) 在这个站点查看下载最新版 https://www.golangtc.com/static/go/ (linux-amd64是64位的。linux-386是32...

    1,安装gcc(编译器套件)
    [root@192 /]# yum install gcc
    2,安装git(分布式版本控制系统)
    [root@192 /]# yum install git
    3,安装go语言环境(因为ngrok的运行环境需要)
    在这个站点查看下载最新版 https://www.golangtc.com/static/go/ (linux-amd64是64位的。linux-386是32位的)
    目前下载的————go1.9.2.linux-amd64.tar.gz
    centos 查看版本及位数命令cat proc/version
    下载好后通过Xshell 上传到服务器并解压
    [root@192 go]# tar -zxvf go1.9.2.linux-amd64.tar.gz
    添加环境变量

    vim /etc/profile
    添加
    export GO_HOME=/usr/local/go/go
    export PATH=$PATH:$GO_HOME/bin
    

    添加完后执行source /etc/profile使配置生效

    查看是否安装成功(查看版本号)

    [root@192 /]# go version
    go version go1.9.2 linux/amd64
    

    4,搭建Ngrok服务
    4.1 下载ngrok源码

    [root@192 /]# cd usr/local/ngrok
    [root@192 ngrok]# git clone https://github.com/tutumcloud/ngrok.git ngrok
    

    4.2 生成证书
    cd ngrok
    abc.com在这里是自己的域名

    export NGROK_DOMAIN="abc.com"
    
    openssl genrsa -out rootCA.key 2048  #生成rootCA.key文件
    
    openssl req -x509 -new -nodes -key rootCA.key -subj "/CN=$NGROK_DOMAIN" -days 5000 -out rootCA.pem
    
    openssl genrsa -out device.key 2048  #生成device.key文件
    
    openssl req -new -key device.key -subj "/CN=$NGROK_DOMAIN" -out device.csr
    
    openssl x509 -req -in device.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out device.crt -days 5000
    

    4.3 将新生成的证书替换,执行下面命令后 “y” 回车 一行一行执行代码!

    cp rootCA.pem assets/client/tls/ngrokroot.crt
    
    cp device.crt assets/server/tls/snakeoil.crt
    
    cp device.key assets/server/tls/snakeoil.key
    

    5.编译生成ngrokd(服务端)

    GOOS=linux GOARCH=amd64 make release-server
    

    生成在~/ngrok/bin/目录中

    6.编译生成ngrok(客户端)

    GOOS=windows GOARCH=amd64 make release-client
    

    生成在~/ngrok/bin/windows_amd64/目录中

    7.用SSH Secure Shell Client工具
    将~/ngrok/bin/windows_amd64/里的文件下载到本地Windows下,如D:\ngrok

    8.在D:\ngrok\windows_amd64中新建文件,改名为 ngrok.cfg

    文件中输入:

    server_addr: "abc.com:4443" // 4443 监控端口
    
    trust_host_root_certs: false
    
    1. 开启远程服务
    cd ngrok
    sudo bin/ngrokd -domain='abc.com' -httpAddr=':81' -httpsAddr=':8081' -tunnelAddr=':4443'
    

    以上端口如果在Ece 服务中需要设置安全组规则才能不被防火墙拦截

    启动成功如下:
    启动远程服务成功

    1. 再在本地开启一个http端口 就可以做映射了
      在文件“D:\ngrok\windows_amd64”中创建 start.bat 文件
      并编辑 D:\ngrok\windows_amd64>ngrok.exe -log=ngrok.log -config=ngrok.cfg -subdomain www 8082

    分别说明一下后面的参数意思:

    -log参数用于指定ngrok的日志内容,有些时候一些错误,我们可以通过日志进行分析。所以这个还是很有必要的。
    -config参数用于指定载入的配置文件,前面我们已经看到客户端文件夹中,我有一个ngrok.cfg文件,待会我们会说明配置文件的内容。
    -subdomain参数用于指定我们映射到外网后,访问的子域名,例如服务器端我绑定的域名是abc.com那么这里的subdomain设置的www,说明我们本地映射的外网访问域名则为:www.abc.com后面的8082这是说明访问要访问的本地http服务的端口,一般都是8082号端口
    然后将上面的脚本内容保存到start.bat文件中即可。

    11.运行start.bat 文件成功如图:
    在这里插入图片描述
    这里解释一下 8082端口 是本地启动的tomcat端口
    访问:http://www.abc.com:81/news/public/login.do
    就可以外网访问到映射到本地的项目了。。。。

    展开全文
  • 在国内开发微信公众号、企业号以及做前端开发的朋友想必对ngrok都不陌生吧,就目前来看,ngrok可是最佳的在内网调试微信服务的tunnel工 具。记得今年春节前,ngrok.com提供的服务还一切正常呢,但春节后似乎就一切不...

    在国内开发微信公众号、企业号以及做前端开发的朋友想必对ngrok都不陌生吧,就目前来看,ngrok可是最佳的在内网调试微信服务的tunnel工 具。记得今年春节前,ngrok.com提供的服务还一切正常呢,但春节后似乎就一切不正常了。ngrok.com无法访问,ngrok虽然能连上 ngrok.com提供的服务,但微信端因为无法访问ngrok.com,导致消息一直无法发送到我们的服务地址上,比如xxxx.ngrok.com。 这一切都表明,ngork被墙了。没有了ngrok tunnel,一切开始变得困难且没有效率起来。内网到外部主机部署和调试是一件慢的让人想骂街的事情。

    ngrok不能少。ngrok以及其服务端ngrokd都是开源的,之前我也知道通过源码可以自搭建ngrok服务。请求搜索引擎后,发现国内有个朋友已经搭建了一个www.tunnel.mobi的ngrok公共服务,与ngrok.com类似,我也实验了一下。

    编写一个ngrok.cfg,内容如下:

    server_addr: “tunnel.mobi:44433”
    trust_host_root_certs: true

    用ngrok最新客户端1.7版本执行如下命令:

    $ngrok -subdomain tonybaiexample -config=ngrok.cfg 80

    可以顺利建立一个tunnel,用于本机向外部提供”tonybaiexample.tunnel.mobi”服务。

    Tunnel Status online
    Version 1.7/1.7
    Forwarding http://tonybaiexample.tunnel.mobi -> 127.0.0.1:80
    Forwarding https://tonybaiexample.tunnel.mobi -> 127.0.0.1:80
    Web Interface 127.0.0.1:4040
    # Conn 0
    Avg Conn Time 0.00ms

    而且国内的ngrok服务显然要远远快于ngrok.com提供的服务,消息瞬间即达。

    但这是在公网上直接访问的结果。放在公司内部,我看到的却是另外一个结果:

    Tunnel Status reconnecting
    Version 1.7/
    Web Interface 127.0.0.1:4040
    # Conn 0
    Avg Conn Time 0.00ms

    我们无法从内网建立tunnel,意味着依旧不方便和低效,因为很多基础服务都在内网部署,内外网之间的交互十分不便。但内网连不上tunnel.mobi也是个事实,且无法知道原因,因为看不到server端的连接错误日志。

    于是我决定自建一个ngrok服务。

    一、准备工作

    搭建ngrok服务需要在公网有一台vps,去年年末曾经在Amazon申请了一个体验主机EC2,有公网IP一个,这次就打算用这个主机作为ngrokd服务端。

    需要一个自己的域名。已有域名的,可以建立一个子域名,用于关联ngrok服务,这样也不会干扰原先域名提供的服务。(不用域名的方式也许可以,但我没有试验过。)

    搭建的参考资料主要来自下面三个:
    1) ngrok的官方SELFHOST指南:https://github.com/inconshreveable/ngrok/blob/master/docs/SELFHOSTING.md
    2) 国外一哥们的博客:http://www.svenbit.com/2014/09/run-ngrok-on-your-own-server/
    3) “海运的博客”中的一篇文章:http://www.haiyun.me/archives/1012.html

    二、实操步骤

    我的AWS EC2实例安装的是Ubuntu Server 14.04 x86_64,并安装了golang 1.4(go version go1.4 linux/amd64)。Golang是编译ngrokd和ngrok所必须的,建议直接从golang官方下载对应平台的二进制安装包(国内可以从 golangtc.com上下载,速度慢些罢了)。

    1、下载ngrok源码

    (GOPATH=~/goproj)
    mkdir /goproj/src/github.com/inconshreveable git clone https://github.com/inconshreveable/ngrok.git
    $ export GOPATH=~/goproj/src/github.com/inconshreveable/ngrok

    2、生成自签名证书

    使用ngrok.com官方服务时,我们使用的是官方的SSL证书。自建ngrokd服务,我们需要生成自己的证书,并提供携带该证书的ngrok客户端。

    证书生成过程需要一个NGROK_BASE_DOMAIN。 以ngrok官方随机生成的地址693c358d.ngrok.com为例,其NGROK_BASE_DOMAIN就是”ngrok.com”,如果你要 提供服务的地址为”example.tunnel.tonybai.com”,那NGROK_BASE_DOMAIN就应该 是”tunnel.tonybai.com”。

    我们这里以NGROK_BASE_DOMAIN=”tunnel.tonybai.com”为例,生成证书的命令如下:

    cd /goproj/src/github.com/inconshreveable/ngrok openssl genrsa -out rootCA.key 2048
    opensslreqx509newnodeskeyrootCA.keysubj/CN=tunnel.tonybai.comdays5000outrootCA.pem openssl genrsa -out device.key 2048
    opensslreqnewkeydevice.keysubj/CN=tunnel.tonybai.comoutdevice.csr openssl x509 -req -in device.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out device.crt -days 5000

    执行完以上命令,在ngrok目录下就会新生成6个文件:

    -rw-rw-r– 1 ubuntu ubuntu 1001 Mar 14 02:22 device.crt
    -rw-rw-r– 1 ubuntu ubuntu 903 Mar 14 02:22 device.csr
    -rw-rw-r– 1 ubuntu ubuntu 1679 Mar 14 02:22 device.key
    -rw-rw-r– 1 ubuntu ubuntu 1679 Mar 14 02:21 rootCA.key
    -rw-rw-r– 1 ubuntu ubuntu 1119 Mar 14 02:21 rootCA.pem
    -rw-rw-r– 1 ubuntu ubuntu 17 Mar 14 02:22 rootCA.srl

    ngrok通过bindata将ngrok源码目录下的assets目录(资源文件)打包到可执行文件(ngrokd和ngrok)中 去,assets/client/tls和assets/server/tls下分别存放着用于ngrok和ngrokd的默认证书文件,我们需要将它们替换成我们自己生成的:(因此这一步务必放在编译可执行文件之前)

    cp rootCA.pem assets/client/tls/ngrokroot.crt
    cp device.crt assets/server/tls/snakeoil.crt
    cp device.key assets/server/tls/snakeoil.key

    3、编译ngrokd和ngrok

    在ngrok目录下执行如下命令,编译ngrokd:

    $ make release-server

    不过在我的AWS上,出现如下错误:

    GOOS=”” GOARCH=”” go get github.com/jteeuwen/go-bindata/go-bindata
    bin/go-bindata -nomemcopy -pkg=assets -tags=release \
    -debug=false \
    -o=src/ngrok/client/assets/assets_release.go \
    assets/client/…
    make: bin/go-bindata: Command not found
    make: * [client-assets] Error 127

    go-bindata被安装到了GOBINgoGOBIN/go-bindata拷贝到当前ngrok/bin下。

    $ cp /home/ubuntu/.bin/go14/bin/go-bindata ./bin

    再次执行make release-server。

    ~/goproj/src/github.com/inconshreveable/ngrok$ make release-server
    bin/go-bindata -nomemcopy -pkg=assets -tags=release \
    -debug=false \
    -o=src/ngrok/client/assets/assets_release.go \
    assets/client/…
    bin/go-bindata -nomemcopy -pkg=assets -tags=release \
    -debug=false \
    -o=src/ngrok/server/assets/assets_release.go \
    assets/server/…
    go get -tags ‘release’ -d -v ngrok/…
    code.google.com/p/log4go (download)
    go: missing Mercurial command. See http://golang.org/s/gogetcmd
    package code.google.com/p/log4go: exec: “hg”: executable file not found in $PATH
    github.com/gorilla/websocket (download)
    github.com/inconshreveable/go-update (download)
    github.com/kardianos/osext (download)
    github.com/kr/binarydist (download)
    github.com/inconshreveable/go-vhost (download)
    github.com/inconshreveable/mousetrap (download)
    github.com/nsf/termbox-go (download)
    github.com/mattn/go-runewidth (download)
    github.com/rcrowley/go-metrics (download)
    Fetching https://gopkg.in/yaml.v1?go-get=1
    Parsing meta tags from https://gopkg.in/yaml.v1?go-get=1 (status code 200)
    get “gopkg.in/yaml.v1”: found meta tag main.metaImport{Prefix:”gopkg.in/yaml.v1”, VCS:”git”, RepoRoot:”https://gopkg.in/yaml.v1“} at https://gopkg.in/yaml.v1?go-get=1
    gopkg.in/yaml.v1 (download)
    make: * [deps] Error 1

    又出错!提示找不到hg,原来是aws上没有安装hg。install hg后(sudo apt-get install mercurial),再编译。

    $ make release-server
    bin/go-bindata -nomemcopy -pkg=assets -tags=release \
    -debug=false \
    -o=src/ngrok/client/assets/assets_release.go \
    assets/client/…
    bin/go-bindata -nomemcopy -pkg=assets -tags=release \
    -debug=false \
    -o=src/ngrok/server/assets/assets_release.go \
    assets/server/…
    go get -tags ‘release’ -d -v ngrok/…
    code.google.com/p/log4go (download)
    go install -tags ‘release’ ngrok/main/ngrokd

    同样编译ngrok:

    $ make release-client
    bin/go-bindata -nomemcopy -pkg=assets -tags=release \
    -debug=false \
    -o=src/ngrok/client/assets/assets_release.go \
    assets/client/…
    bin/go-bindata -nomemcopy -pkg=assets -tags=release \
    -debug=false \
    -o=src/ngrok/server/assets/assets_release.go \
    assets/server/…
    go get -tags ‘release’ -d -v ngrok/…
    go install -tags ‘release’ ngrok/main/ngrok

    AWS上ngrokd和ngrok被安装到了$GOBIN下。

    三、调试

    1、启动ngrokd

    $ ngrokd -domain=”tunnel.tonybai.com” -httpAddr=”:8080” -httpsAddr=”:8081”
    [03/14/15 04:47:24] [INFO] [registry] [tun] No affinity cache specified
    [03/14/15 04:47:24] [INFO] [metrics] Reporting every 30 seconds
    … …

    2、公网连接ngrokd

    将生成的ngrok下载到自己的电脑上。

    创建一个配置文件ngrok.cfg,内容如下:

    server_addr: “tunnel.tonybai.com:4443”
    trust_host_root_certs: false

    执行ngrok:
    $ ngrok -subdomain example -config=ngrok.cfg 80

    Tunnel Status reconnecting
    Version 1.7/
    Web Interface 127.0.0.1:4040
    、# Conn 0
    Avg Conn Time 0.00ms

    连接失败。此刻我的电脑是在公网上。查看ngrokd的日志,没有发现连接到达Server端。试着在本地ping tunnel.tonybai.com这个地址,发现地址不通。难道是DNS设置的问题。之前我只是设置了”*.tunnel.tonybai.com”的A地址,并未设置”tunnel.tonybai.com”。于是到DNS管理页面,添加了”tunnel.tonybai.com”的A记录。

    待DNS记录刷新OK后,再次启动ngrok:

    Tunnel Status online
    Version 1.7/1.7
    Forwarding http://epower.tunnel.tonybai.com:8080 -> 127.0.0.1:80
    Forwarding https://epower.tunnel.tonybai.com:8080 -> 127.0.0.1:80
    Web Interface 127.0.0.1:4040
    # Conn 0
    Avg Conn Time 0.00ms

    这回连接成功了!

    3、内网连接ngrokd

    将ngrok拷贝到内网的一台PC上,这台PC设置了公司的代理。

    按照同样的步骤启动ngrok:

    $ ngrok -subdomain example -config=ngrok.cfg 80

    Tunnel Status reconnecting
    Version 1.7/
    Web Interface 127.0.0.1:4040
    # Conn 0
    Avg Conn Time 0.00ms

    不巧,怎么又失败了!从Server端来看,还是没有收到客户端的连接,显然是连接没有打通公司内网。从我自己的squid代理服务器来看,似乎只有443端口的请求被公司代理服务器允许通过,4443则无法出去。

    1426301143.558 9294 10.10.126.101 TCP_MISS/000 366772 CONNECT api.equinox.io:443 – DEFAULT_PARENT/proxy.xxx.com - 通过了
    1426301144.441 27 10.10.126.101 TCP_MISS/000 1185 CONNECT tunnel.tonybai.com:4443 – DEFAULT_PARENT/proxy.xxx.com - 似乎没有通过

    只能修改server监听端口了。将-tunnelAddr由4443改为443(注意AWS上需要修改防火墙的端口规则,这个是实时生效的,无需重启实例):

    $ sudo ngrokd -domain=”tunnel.tonybai.com” -httpAddr=”:8080” -httpsAddr=”:8081” -tunnelAddr=”:443”
    [03/14/15 04:47:24] [INFO] [registry] [tun] No affinity cache specified
    [03/14/15 04:47:24] [INFO] [metrics] Reporting every 30 seconds
    … …

    将ngrok.cfg中的地址改为443:

    server_addr: “tunnel.tonybai.com:443”

    再次执行ngrok客户端:

    Tunnel Status online
    Version 1.7/1.7
    Forwarding http://epower.tunnel.tonybai.com:8080 -> 127.0.0.1:80
    Forwarding https://epower.tunnel.tonybai.com:8080 -> 127.0.0.1:80
    Web Interface 127.0.0.1:4040
    # Conn 0
    Avg Conn Time 0.00ms

    这回成功连上了。

    4、80端口

    是否大功告成了呢?我们看看ngrok的结果,总感觉哪里不对呢?噢,转发的地址怎么是8080端口呢?为何不是80?微信公众号/企业号可只是支持80端口啊!

    我们还需要修改一下Server端的参数,将-httpAddr从8080改为80。

    $ sudo ngrokd -domain=”tunnel.tonybai.com” -httpAddr=”:80” -httpsAddr=”:8081” -tunnelAddr=”:443”

    这回再用ngrok连接一下:
    Tunnel Status online
    Version 1.7/1.7
    Forwarding http://epower.tunnel.tonybai.com -> 127.0.0.1:80
    Forwarding https://epower.tunnel.tonybai.com -> 127.0.0.1:80
    Web Interface 127.0.0.1:4040
    # Conn 0
    Avg Conn Time 0.00ms

    这回与我们的需求匹配上了。

    5、测试

    在内网的PC上建立一个简单的http server 程序:hello

    //hello.go
    package main

    import “net/http”

    func main() {
    http.HandleFunc(“/”, hello)
    http.ListenAndServe(“:80”, nil)
    }

    func hello(w http.ResponseWriter, r *http.Request) {
    w.Write([]byte(“hello!”))
    }

    gobuildohellohello.go sudo ./hello

    通过公网浏览器访问一下“http://epower.tunnel.tonybai.com”这个地址,如果你看到浏览器返回”hello!”字样,那么你的ngrokd服务就搭建成功了!

    四、注意事项

    客户端ngrok.cfg中server_addr后的值必须严格与-domain以及证书中的NGROK_BASE_DOMAIN相同,否则Server端就会出现如下错误日志:

    [03/13/15 09:55:46] [INFO] [tun:15dd7522] New connection from 54.149.100.42:38252
    [03/13/15 09:55:46] [DEBG] [tun:15dd7522] Waiting to read message
    [03/13/15 09:55:46] [WARN] [tun:15dd7522] Failed to read message: remote error: bad certificate
    [03/13/15 09:55:46] [DEBG] [tun:15dd7522] Closing

    展开全文
  • ngrok环境搭建

    2019-03-11 11:22:12
    ngrok环境搭建 ngrok 是一个反向代理,通过在公共的端点和本地运行的 Web 服务器之间建立一个安全的通道。ngrok 可捕获和分析所有通道上的流量,便于后期分析和重放。 简单来说就是可以让你的本地服务暴露在外网上面...

    ngrok环境搭建

    ngrok 是一个反向代理,通过在公共的端点和本地运行的 Web 服务器之间建立一个安全的通道。ngrok 可捕获和分析所有通道上的流量,便于后期分析和重放。

    简单来说就是可以让你的本地服务暴露在外网上面,可以通过外网访问,这是我们经常需要用到的功能。

    适用场景:

    • 微信本地开发
    • 支付宝接口本地调试
    • 将本地的网站,可以让其他人通过外网访问,作为展示

    准备工作:

    1.安装git

    2.安装go环境
    ubuntu系统: apt-get install golang
    centos系统:yum intall golang
    按教程安装,是将 go 安装到了 ‘~/go’,以后我们将其安装在 ‘/usr/local/go’,需要的操作有:
    1.mv ~/go /usr/local/
    2.修改go相关环境变量

    mkdir $HOME/go 		// 使用$HOME/go 作为go的工作目录
    echo 'export GOROOT=/usr/local/go'>> ~/.bashrc  
    echo 'export GOPATH=$HOME/go'>> ~/.bashrc  
    echo 'export PATH=$PATH:$GOROOT/bin'>> ~/.bashrc  
    source  $HOME/.bashrc 
    

    3.安装ngrok

    	cd /usr/local/
    	// 获取代码
    	git clone https://github.com/inconshreveable/ngrok.git
    	cd ngrok
    	// 导入环境变量
    	export NGROK_DOMAIN="ngrok.自己的域名.com"
    
    	// 生成自签名ssl证书
    	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
    
    	// 应该是日志相关(感觉都是github上的,应该不存在说的翻墙之类的)
    	vim /usr/local/ngrok/src/ngrok/log/logger.go
    	log "github.com/keepeye/log4go"
    	/*
    		import (
    	        "fmt"
    	        log "github.com/alecthomas/log4go"		// 将这里替换下
    		)
    	 */
    

    4.利用go开始编译ngrok客户端和服务端(利用Go的交叉编译,注意设置平台参数)

    		// 服务端,用的是64位centos
    			cd /usr/local/go/src
    			GOOS=linux GOARCH=amd64 ./make.bash
    			cd /usr/local/ngrok/
    			GOOS=linux GOARCH=amd64 make release-server
    
    		// 客户端,用的是64位mac
    			cd /usr/local/go/src
    			GOOS=darwin GOARCH=amd64 ./make.bash
    			cd /usr/local/ngrok/
    			GOOS=darwin GOARCH=amd64 make release-client
    
    		// 客户端,windows 64位
    			cd /usr/local/go/src
    			GOOS=windows GOARCH=amd64 ./make.bash
    			cd /usr/local/ngrok/
    			GOOS=windows GOARCH=amd64 make release-client
    
    		最终生成的路径,都在 /usr/local/ngrok/bin
    			服务端:ngrokd
    			linux客户端:ngrok
    			mac64位客户端:darwin_amd64/ngork
    			win64位客户端:windows_amd64/ngork
    

    5.ngrokd服务端

    1>启动ngrokd服务端
    		/usr/local/ngrok/bin/ngrokd -domain="$NGROK_DOMAIN" -httpAddr=":8000"
     
    2>ngrokd后台运行
    			nohup /usr/local/ngrok/bin/ngrokd -domain="$NGROK_DOMAIN" -httpAddr=":8000" &
    
    3>结束后台运行
    			ps -A 	// 找到PID
    			kill PID
    			---
    			pkill ngrokd
    			killall ngrokd
    			忘记了进城相关命令,以后有时间复习
    			---
    

    6.启动ngrok客户端
    1>下载服务端生成的客户端软件
    2>创建 ngrok.conf 配置文件

    server_addr: "ngrok.ipxjy.com:8000"
    trust_host_root_certs: false
    

    3>启动客户端
    .

    /ngrok -config=./ngrok.cfg -subdomain=blog 80
    setsid ./ngrok -config=./ngrok.cfg -subdomain=test 80 #在linux下如果想后台运行
    
    
    	需要注意:
    		1.ngrok服务端,按照上面的步骤,并不在 $PATH 中,我们可以选择性添加
    			echo 'export PATH=$PATH:/usr/local/ngrok/bin' >> ~/.bashrc  
    			source ~/.bashrc
    		2.启动时,指定的 $NGROK_DOMAIN,并未永久添加到 个人配置,也可以选择性添加
    			echo 'export NGROK_DOMAIN=ngrok.pxjy.com' >> ~/.bashrc  
    			source ~/.bashrc
    

    上面的搭建步骤是之前的笔记,今天重新配置一遍:
    1.安装 git

    yum -y install git
    

    2.安装 go

    yum -y install golang
    

    3.下载 ngrok 源码

    mkdir ~/ngrok//内网穿透
    cd ~/ngrok//内网穿透
    git clone https://github.com/inconshreveable/ngrok.git
    

    4.导入 ngrok 我们配置的域名

    假设我们想要给 ngrok 配置的外网域名是:ngrok.test.com
    echo 'export NGROK_DOMAIN=ngrok.test.com' >> ~/.bashrc
    source ~/.bashrc
    

    5.生成自签名ssl证书

    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
    

    6.编译安装 ngrok 客户端和服务端
    服务端,我们编译64位 linux 版:

    GOOS=linux GOARCH=amd64 make release-server
    

    客户端,我们编译64位 mac 和 windows 版:

    GOOS=darwin GOARCH=amd64 make release-client
    GOOS=windows GOARCH=amd64 make release-client
    

    从服务器端下载编译好的客户端到本地

    scp root@xxx:~/ngrok内网穿透/ngrok/bin/darwin_amd64/ngork ./
    scp root@xxx:~/ngrok内网穿透/ngrok/bin/windows_amd64/ngork.exe ./
    

    7.启动 ngrokd 服务

    	// 前台启动
    	ngrokd -domain="$NGROK_DOMAIN" -httpAddr=":8001" -httpsAddr=":8002"
    
    	// 后台启动
    	TODO(等有时间再整下这里,写个 service 脚本)
    

    8.客户端连接

    // 创建 ngrok.conf 配置文件	
    vim ngrok.conf
    server_addr: "ngrok.test.com:4443"
    trust_host_root_certs: false
    
    
    // 启动 ngrok 客户端,8000 端口(所以我们需要在本地按端口来配置虚拟主机)
    ngrok -config=./ngork.conf -subdomain=dongxuemin 8000
    

    9.阿里云服务器配置
    域名解析
    假设我们的域名是: test.com

    		我们一般配置一个 'ngrok' 的二级域名
    			ngrok.test.com - 指向到我们 ngrokd 所在的服务器地址
    
    		还需要配置一个泛域名
    			*.ngrok.test.com - 也指向到我们 ngrokd 所在的服务器地址 
    
    	开放端口	
    		ngrokd 默认在服务器上会监听(以下 3 个端口都可以自定义):
    			4443 - ngrok 客户端监听地址
    			80 - http 监听地址
    			443 - https 监听地址
    
    		这 3 个端口,我们都需要放开:
    			1>阿里云安全策略组
    			2>ECS 服务器防火墙
    

    10.相关命令
    ngrokd - 服务端命令(没找到文档说明,我们运行 ngrokd --help 查看命令帮助):

    	    -domain string
    				托管隧道的域名(默认是 "ngrok.com")
     
    		-httpAddr string
    			HTTP 连接的公共地址,空字符串表示禁用(默认是 ":80")
    
    		-httpsAddr string
    			监听 HTTPS 连接的公共地址,空字符串表示禁用(默认是 ":443")
    
    		-log string
    			将日志消息写入此文件。'stdout' 和 'none' 有特殊含义(默认是 "stdout")
    
    		-log-level string
    			要记录的消息级别。DEBUG、INFO、WARNING、ERROR 之一(默认是 "DEBUG")
    
    		-tlsCrt string
    			TLS 证书文件的路径
    
    		-tlsKey string
    			TLS 秘钥文件
    
    		-tunnelAddr string
    			ngrok 客户端监听的公共地址(默认是 ":4443")
    
    	ngrok - 客户端命令(1.x 版本可能跟我们在官网看到的文档是不同的,我们运行 ngrok --help 查看命令帮助):
    		使用:./ngrok [选项] <本地端口或地址>
    
    		选项:
    			-authtoken string
    				标识 ngrok.com 账号的身份认证 token
    
    			-config string
    				ngrok 配置文件路径(默认是:$HOME/.ngrok)
    
    			-hostname string
    				从 ngrok 服务器上请求一个自定义主机名。(仅限于 HTTP)(需要我们的 DNS 的 CNAME)
    
    			-httpauth string
    				用户名:密码 的 HTTP 基础身份认证用于保护公共隧道端点
    
    			-log string
    				将日志消息写入此文件。'stdout' 和 'none' 有特殊含义(默认是 "none")
    
    			-log-level string
    				要记录的消息级别。DEBUG、INFO、WARNING、ERROR 之一(默认是 "DEBUG")
    
    			-proto string
    				隧道的流量协议 {'http', 'https', 'tcp'}(默认是:'http+https')
    
    			-subdomain string
    				从ngrok 服务器上请求一个自定义子域名
    
    		示例:
    			ngrok 80
    			ngrok -subdomain=example 8080 		// 最终的访问域名为:example.ngrok.xxx.com
    			ngrok -proto=tcp 22
    			ngrok -hostname="example.com" -httpauth="用户名:密码" 10.0.0.1
    
    		高级用法:ngrok [选项] <命令> [命令参数] [...]
    			ngrok start [隧道名] [...]
    				根据配置文件中的隧道名来启用隧道
    
    			ngrok start-all
    				启动定义在配置文件中的所有隧道
    
    			ngrok list
    				列出定义在配置文件中的所有隧道
    
    			ngrok help
    				帮助
    
    			ngrok version
    				ngrok 版本
    
    		示例:
    			ngork start www api blog pubsub
    			ngork -log=stdout -config=ngrok.yml start ssh
    			ngrok start-all
    			ngrok version
    
    展开全文
  • 有公网的服务器,用于搭建ngrok的服务端,必须有公网ip,并且可以正常访问(本次用的服务器是腾讯云服务器 系统CentOS 7.4 64位) (2).域名,用于访问 (3).域名需要解析,我用的是阿里云解析,解析图如下,...
  • 10分钟教你搭建自己的ngrok服务器

    万次阅读 多人点赞 2018-02-23 16:05:31
    内网穿透想必开发过微信的同志都很了解,大部分人选择网上寻找各种现成的,比如ngrok官网、ittun-ngrok、sunny-ngrok或者花生壳之类的。但是世界上没有免费的...导致测试无法进行,最终萌生出自己搭建一个ngrok服...
  • 搭建ngrok完全手册用途你要准备这些功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants...
  • 3分钟快速搭建ngrok服务器

    千次阅读 2019-06-12 16:15:27
    以下仅是个人学习记录,说明并不全,请见谅。...二、环境搭建: 1. 基础环境 yum -yinstallzlib-devel openssl-devel perl hg cpio expat-devel gettext-devel curl curl-devel perl-ExtUtils-MakeMakerhg ...
  • web服务器搭建ngrok

    万次阅读 2016-04-16 15:43:01
    ngrok介绍许多刚学java web的同学(包括我自己)肯定都非常好奇,如何在外网上访问自己做的项目,跟我们本地访问tomcat有什么区别?今天就向大家介绍一个非常强大的外网映射工具:ngrok.ngrok可以把你的本地ip(127.0.0.1|...
  • Windows 下 配置 ngrok ngrok使用教程

    万次阅读 2018-01-24 16:44:09
    1. ngrok介绍 ngrok 是一个反向代理,通过在公共的端点和本地运行的 Web 服务器之间建立一个安全的通道。ngrok 可捕获和分析所有通道上的流量,便于后期分析和重放。简单来说就是可以通过外网访问你本地的...
  • 基于docker镜像的ngrok搭建和使用

    千次阅读 2018-09-19 14:41:56
    - 建议直接阅读这篇文章 ...docker pull hteen/ngrok # 启动一个容器生成ngrok客户端,服务器端和CA证书 docker run --rm -it \ -e DOMAIN="***.2shou91.com" \ -v /root/ngrok:/myfiles h...
  • Ubuntu上搭建自己的ngrok服务器

    千次阅读 2018-08-31 18:28:14
    Ubuntu上搭建自己的ngrok服务器 参考网站:http://www.sunnyos.com/article-show-48.html 上面的内容似乎是sunny大神本人写的,了解的越多,发现自己懂得越少,但是对知识的渴求和好奇却越深。 我们暂时做的只是...
  • 虽然成功搭建ngrok服务器,本地能被访问 但有几个问题: 1. 没有设置密码账号,谁都可以用 2. 尝试连接ngrok.com会连接成功,但立即提示需要付费 3. 怎样给ngrokd服务端添加身份验证 > 纯粹是问问,分不多 ## 控制台...
  • Windows搭建ngrok服务器,Linux搭建ngrok服务器,支持用户管理,http子域名授权,tcp端口授权,支持各类32位、64位操作系统;利用云计算的强大力量,快速编译生成ngrok服务端和客户端,并自动生成配置脚本,实现绿色...
  • docker 搭建ngrok

    千次阅读 2017-03-07 14:48:56
    内网穿透利器ngrok,小弟自己按照教程搭建ngrok用于穿透内网做程序联调测试 注意事项: 1、前提需要有一台自己的服务器(我的是阿里云centos7) 2、有一个备案通过的域名 参考教程: 1、使用Docker搭建Ngrok...
  • 快速搭建Ngrok-含免费服务器什么是内网穿透?Ngrok是什么?为什么需要内网穿透?使用ubantu16搭建ngrok服务器下载ngrok源码安装go语言配置环境变量生成证书编译启动测试福利 什么是内网穿透? 内网穿透,即NAT穿透...
  • 参考博文:https://blog.csdn.net/qq_34292044/article/details/78559128https://blog.csdn.net/huanxiang201311/article/details/72725891一.环境准备 1.固定的ip地址,我用的是阿里云,系统cenos6,比较老的系统。...
  • Ngrok 是什么 ngrok 是一个反向代理,通过在公共的端点和本地运行的 Web 服务器之间建立一个安全的通道。ngrok 可捕获和分析所有通道上的流量,便于后期分析和重放。 网络架构如下图所示: 介绍和图片来自: ...
  • 阿里云搭建ngrok实现内网穿透

    万次阅读 2018-08-02 13:40:26
    下面我就来教大家怎么用阿里云和ngrok搭建一个内网穿透!!!! 1.准备工作: 要能实现内网穿透,你必须得有个域名,然后还有个服务器!!两者缺一不可 2.添加dns解析: 到你的阿里云服务器里边添加个dns解析,...
  • ngrok官方 免费使用教程

    千次阅读 2018-04-22 17:54:56
    用的人多了就不稳定了,不过还是出个这样的教程,大家有服务器的尽量自己搭建~ 稳定快速 打开官网 http://ngrok.com 下载客户端 点击导航栏上的 Download 下载对应版本的客户端,如本例下载 mac64 版本的...
1 2 3 4 5 ... 20
收藏数 1,553
精华内容 621
关键字:

ngrok搭建