搭建ngrok教程有蛮多,推荐一篇把,地址是:https://www.svenbit.com/2014/09/run-ngrok-on-your-own-server/,教程里面,域名请用一致的,比如说用了tunnle.xxx.com,请所有的地方都用一致。

搭建的教程,我也写一下,我用的是CENTOS 7.3.1611
ngrok需要自己编译,所以先安装3个环境
执行这3条命令或者安装这3个程序了

sudo apt-get install build-essential  
sudo apt-get install golang    
sudo apt-get install mercurial

然后git下来ngrok的代码

   git clone https://github.com/inconshreveable/ngrok.git ngrok
   cd ngrok

再弄出证书来

    openssl genrsa -out base.key 2048
    openssl req -new -x509 -nodes -key base.key -days 10000 -subj "/CN=[NGROK_BASE_DOMAIN]" -out base.pem
    openssl genrsa -out server.key 2048
    openssl req -new -key server.key -subj "/CN=[NGROK_BASE_DOMAIN]" -out server.csr
    openssl x509 -req -in server.csr -CA base.pem -CAkey base.key -CAcreateserial -days 10000 -out server.crt

替换下证书

    cp base.pem assets/client/tls/ngrokroot.crt

然后就可以编译了,这条命令是编译默认版本的环境服务端和客户端

make release-server release-client

如果编译失败,那么肯定是go有问题,请尝试go version是否能够正常运行,不能的话,请重新执行它的环境变量或者重装

    export GOROOT=/usr/local/go
    export PATH=$PATH:$GOROOT/bin
     使环境变量生效:
    source /etc/profile
    检查是否安装成功:
    go version

然后再编译一次,如果再不行,请看错误输出
其他版本的类似如下命令进行使用,Go的交叉编译,GOARCH=386是32位,GOARCH=amd64为64位, GOOS=linux,windows,darwin,make请在ngrok根目录下使用

    sudo GOOS=windows GOARCH=386 make release-client release-server 

然后就是服务端启动命令,客户端,服务端都生成在bin目录
服务端命令

    setsid ./bin/ngrokd -tlsKey=server.key -tlsCrt=server.crt -domain="tunnle.wlsecret.com" -httpAddr=":80" -httpsAddr=":443"

客户端命令

    ngrok -config=ngrok.cfg -subdomain xxx port

这就ngrok的整个搭建的一个步骤了,搭建这个出了bug,请去我上面给的博客地址看下,一般来说错误对应都会有解答的。
搭建完了,如果想作为一个正式的环境进行使用,同时只有一个域名,一台服务器,那么就很尴尬了,因为ngrok占用了80端口,然后tomcat的web项目也想使用80端口,首先使用nginx作为反向代理进行端口的转发,我第一次是ngrok的http为8081,tomcat为8080,www.wlsecret.com转发至tomcat,*.tunle.wlsecret.com转发至ngrok也就是8081端口,这个样子用是没问题的,但是显示的是8081端口,虽然实际指向为80端口,强迫症受不了,因为它使用服务端的配置,服务端配置为8081,客户端就显示为8081。ngrok的配置,我也给下,至于安装就网上找下

    upstream ngrokserver {
            server 106.14.191.142:8081;
    }
    upstream tomcatserver1 {
            server 106.14.191.142:8080;
    }
   server {
            listen       80;
            server_name  www.wlsecret.com 127.0.0.1 106.14.191.142;
            access_log  logs/host.access.log;
            location / {
                    proxy_set_header Host      $host;
                    proxy_set_header X-Real-IP $remote_addr;
                    proxy_pass   http://tomcatserver1;
                    index  index.html index.htm;
            }
    }

server {

listen 80;
server_name *.tunnle.wlsecret.com tunnle.wlsecret.com;
access_log logs/ngrok.access.log;
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:8081;
    proxy_set_header X-Nginx-Proxy true;
    proxy_set_header Connection "";
    proxy_pass   http://ngrokserver;

}

}

然后如果想增加https,直接监听443,一直不行,然后再nginx里面配置证书,然后非常扯淡的是版本之间配置都有扯淡的区别,最后我是看安装之后的demo弄得,网上的配置最好和本地对比下,因为ngrok.conf都有demo的,我还看了半天ngrok,docker
我这里的配置是

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:8081;
         proxy_set_header Host  $http_host;
         proxy_set_header X-Nginx-Proxy true;
         proxy_set_header Connection "";
         proxy_pass   http://ngrokserver;
}

刚才已经说了这样子配置是ok的,但是显示很难受,所以用docker作为虚拟机,docker里面装一个ngrok,然后docker的80,8082,4443端口指向外面的8081,8082,4443
8081是我用的http,8082是https,4443是默认的端口监听ngrok的端口
重头学docker虽然不难,但是也很头疼。
安装docker,我推荐这个网站,跟着安装就OK了
docker虚拟机非常的轻量级,只会运行你所启用的命令,如果没有命令就会自动关闭,这个特性让我头疼了蛮久,我又去自己编译了一个ngrok的镜像文件,不是很麻烦,但是比较坑,后面看了半天,发现启动有一个很好的命令,d,后台会挂起,然后你可以慢慢的文件复制进容器,
启动命令

sudo docker run -idt ubuntu docker

复制命令

cp host_path containerID:container_path

然后因为需要端口映射所以启动命令修改成

sudo docker run -idt --name=ngrok -p 127.0.0.1:8081:80 -p 127.0.0.1:8082:8082 -p 4443:4443 
-p 443:443 centos:last

大功告成,然后发布,一切OK,但是突然发现访问网页超级慢,心中比较纳闷,我想不可能访问慢啊,我都用静态网页了,研究了下发现并不是服务器运行能力出了故障而是页面资源过多,而服务器只有1M的带宽,HTML静态资源加起来有400K,访问速度带宽换算为k大概135K左右的上限,所以访问比较慢,可以开启gzip,我没有选择,而是把静态资源重新编译了一次,网址是www.wlsecret.com

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐