美文网首页ITIT必备技能
最接地气的Ngrok服务器搭建教程

最接地气的Ngrok服务器搭建教程

作者: 丶Lukez | 来源:发表于2018-10-24 18:12 被阅读383次
    前言:

    简单说一下什么是ngrok:

    ngrok是一个内网穿透的解决方案,它使得你本地的服务器可以被局域网外的公网访问到。我本人作为一个web 程序猿,使用ngrok可以使微信开发变得方便灵活

    ngrok服务端会建立http和https服务,以及供客户端连接的服务,默认端口4443

    它的工作流程如下:

    访问端输入域名->DNS->ngrok服务端->请求映射到ngrok客户端->客户端返回响应到ngrok服务端->ngrok服务端返回响应到访问端

    环境:

    centos

    准备工作:
    1. 一台公网服务器
    2. 一个域名,顶级或二级均可

    关于域名:我们声明两个概念:一个是基础域名,可以是顶级或者二级,它用来为ngrok服务器本身提供外部访问。二就是基于基础域名的二级或者三级域名,它用来映射到你的本地服务器,我称它为映射域名。它可以设置多个,这取决于你的需要。例如 abc.comngrok.abc.com / ngrok2.abc.com,每个映射域名对应一个ngrok客户端

    假设你的域名是 abc.com (全文皆使用此假设)

    如果你需要使用顶级域名作为基础域名,那么请将abc.com泛解析到服务器ip,然后将你需要使用的二级域名通过A记录解析到服务器ip,例如 ngrok.abc.com

    如果你需要使用二级域名,那么先将你的二级域名(xxx.abc.com)通过A记录解析到服务器域名。然后将三级域名(比如 test.xxx)通过CNAME的方式解析到 xxx.abc.com,这次xxx.abc.com便成为了客户端与服务端的连接域名,test.xxx.abc.com则是映射域名

    下面的教程我们使用abc.com作为基础域名演示,如果你的基础域名是二级域名,替换即可

    一,安装git和go
    yum install gcc -y
    
    yum install git -y
    
    yum install mercurial git bzr subversion golang golang-pkg-windows-amd64 golang-pkg-windows-386 -y
    
    
    二,下载源码
    git clone https://github.com/inconshreveable/ngrok.git
    
    

    完成后会在当前目录生成ngrok目录

    三,生成证书(默认的证书是 ngrok.com,我们需要改成 abc.com

    生成:

    cd ngrok  
    
    mkdir cert 
    
    cd cert
    
    export NGROK_DOMAIN="abc.com"
    
    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 device.key 2048
    
    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
    
    

    替换(提示overwrite输入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
    
    
    四:生成服务端与客户端

    切换回ngrok目录

    以下命令按需生成

    <!--linux服务端-->
    GOOS=linux GOARCH=386 make release-server (32位)
    GOOS=linux GOARCH=amd64 make release-server(64位)
    
    <!--Mac OS客户端-->
    GOOS=darwin GOARCH=386 make release-client
    GOOS=darwin GOARCH=amd64 make release-client
    
    <!--windows客户端-->
    GOOS=windows GOARCH=386 make release-client
    GOOS=windows GOARCH=amd64 make release-client
    
    

    启动服务器:

    ./bin/ngrokd -domain="$NGROK_DOMAIN"
    
    

    其它配置:

    -httpAddr=80 此配置用来指定映射域名http访问的端口 默认80

    -httpsAddr=443 https的访问端口 默认443

    -tunnelAddr=4443 客户端连接的端口 默认4443

    以上端口,如若与系统其他服务有冲突,开启服务时请自行配置其他端口

    五:客户端配置与连接

    执行生成客户端后,根据不同平台客户端存在不同的文件夹:

    Mac os 
    bin/darwin_386 (32位)
    bin/darwin_amd64 (64位)
    
    windows
    bin/windows_386
    bin/windows_amd64
    
    

    进入对应的文件夹,通过sz或者ftp等方式将ngrok下载到你需要使用客户端的电脑中

    在客户端中,新建配置文件ngrok.cfg

    <!--配置服务端连接地址,也就是基础域名。端口则与服务端-tunnelAddr配置相同-->
    server_addr: "abc.com:4443"  
    trust_host_root_certs: false
    
    

    运行客户端

    ngrok -config=ngrok.cfg -subdomain ngrok 80 (windows系统客户端)
    
    

    -subdomain用来指定域名的前缀(也就是映射域名的前缀),如上设置ngrok,当访问ngrok.abc.com时,ngrok服务端接收到请求后,便会将客户端http相应返回给访问端。80用来指定本地http服务的端口

    此时,ngrok服务便搭建完成

    注意事项:

    1、(个人推测:)服务端与客户端程序是有关联关系的,通过开始指定的基础域名。所以ngrok客户端只能连接对应的服务器,不然会连接失败

    2、如果你需要将任何三级域名都解析到ngrok,比如你的二级域名是 ngrok.abc.com,那么在域名控制台将*.ngrok通过CNAME到ngrok.abc.com就好了

    以上,如有问题,欢迎提问。如有错误,也欢迎指出,谢谢

    相关文章

      网友评论

        本文标题:最接地气的Ngrok服务器搭建教程

        本文链接:https://www.haomeiwen.com/subject/rgvxtqtx.html