nginx+ngrok的配置

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/XS910115/article/details/50096757

    上篇文章介绍了用nginx反向代理tomcat,而这篇的nginx反向代理ngrok的原理与上篇文章一致。重点在与ngrok在系统的配置。

    简单介绍下ngrok,ngrok可以说是微信开发的是神器。他可以从内网穿透到外网,使微信开发可以在本地实现调试。废话就不多说了,我们开始配置ngrok。

    首先,我租用的是阿里云服务器,系统是ubuntu,所以本文所有的实现都是基于ubuntu系统的。好了,开始行动。

    第一,要安装go语言的编译环境,因为ngrok要在go语言下面进行编译:(建议参考ESC linux系统上安装go工具:http://help.aliyun.com/knowledge_detail/5988704.html?spm=5176.7618386.5.1.Qhg2oB)。

               安装的位置是/usr/golang/go

    第二,设置自己的域名 在/etc/profile 中export NGROK_DOMAIN="自己域名",保存退出,之后执行source /etc/profile 这句的主要意思是使自己的设置生效

   

   前面两个方法所起到的作用就是安装好go语言的编译环境和设置自己ngrok的基域名,所谓的基域名举个例子就是:

   基域名:xxx.com,自己配置的域名都是在xxx.com上生成的,比如:weixin.xxx.com。这个主要是作为参数为后边ngrok生成自己的证书做准备。

   下面就是最重要的ngrok的安装。

   第三、ngrok的安装。

   首先安装git工具,之后git clone “https://github.com/inconshreveable/ngrok.git”。下载ngrok源码。位置自己选择。我选择的位置是/usr/golang/ngrok

  下载完成后,就要生成自定义的证书:

  cd /usr/golang/ngrok        #进入ngrok文件夹

   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

 

将自己的生成的证书替换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

证书操作完成后,就要准备ngrok服务器和客户端。

首选要选择环境

GOOS=linux GOACRH=amd64 ##如果是32则GOARCH=368

make release-server

中间可能会出现错误,因为在/usr/golang/ngrok/src/ngrok/log/logger.go中存在对google code的引用,我们要更改成如下:

package log
import (
        log "github.com/keepeye/log4go"
        "fmt"
)

保存后

继续执行 make release-server

执行完成后在

ngrok/lib中会出现ngrokd这个执行文件

之后就要开始生成客户端文件

我们选择编译windows环境客户端

  首先我们要进入go语言的文件夹

cd /usr/golang/go

执行 GOOS=windows GOACRH=adm64 ./make.bash

执行完成后,在进入ngrok文件夹下:cd /usr/golang/ngrok

选择windows的环境:GOOS=windows GOARCH=amd64 make release-client

执行完成后在 ngrok文件夹下lib中会生成windows_amd64文件夹,下面会有一个ngrok.exe文件,下载这个文件到自己的电脑

在/usr/golang/ngrok文件下执行 bin/ngrokd -domain="$NGROK_DOMAIN" -httpAddr=":80"

这句主要是运行ngrok服务器,端口映射为80.

如果执行成功则出现:

[11/29/15 16:16:20] [INFO] [metrics] Reporting every 30 seconds
[11/29/15 16:16:20] [INFO] [registry] [tun] No affinity cache specified
[11/29/15 16:16:20] [INFO] Listening for public http connections on [::]:8000
[11/29/15 16:16:20] [INFO] Listening for public https connections on [::]:443
[11/29/15 16:16:20] [INFO] Listening for control and proxy connections on [::]:4443

之后在自己电脑上任意位置,建立任意文件夹

文件夹下有ngrok.exe,在ngrok.exe同级文件夹下建立 ngrok.conf文件(文件名任意)

server_addr: "自己服务器定义的域名:4443"
trust_host_root_certs: false
tunnels:
  http:
    subdomain: "任意字符串作为子域名"
    proto:
      http: "端口"
  ssh:
    remote_port: 2222
    proto:
      tcp: "22"


建立任意名的bat文件:ngrok.bat

ngrok -config ngrok.conf start http

主要的意思是,ngrok.exe执行文件读取ngrok.conf中的内容,启动http代理,成功后:

Tunnel Status online

这就证明自己安装的ngrok成功了。

写了半天,我发现主要是ngrok的安装,还有牵涉到nginx,有点文不对题啊,下面的内容主要是nginx反向代理ngrok

因为自己的80端口绑定了别的应用,而微信的开发又必须用到80端口,所以逼不得已,我被逼学了nginx反向代理。

发现一个问题,所学的东西大都是被逼的,迫于形势不得不学,唉……,不说废话了,我们开始设置nginx对ngrok的代理

我为ngrok设置的端口为8000

利用上篇文章中nginx对tomcat的代理,我同样设置了ngrok的代理,建立了ngrok.conf,内容如下:

upstream ngrok {
    server 127.0.0.1:8000;
    keepalive 64;
}


server {
    listen 80;
    server_name "自己生成的域名";
    access_log "自己选择的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:8000;
        proxy_set_header X-Nginx-Proxy true;
        proxy_set_header Connection "";
        proxy_pass      http://ngrok ;
    }
}

保存后,

运行nginx -t 如果没问题,就重新启动nginx,一切就OK了


参考了如下博客:

http://www.ekan001.com/articles/38

http://help.aliyun.com/knowledge_detail/5988704.html?spm=5176.7618386.5.1.jxyrBS

没有更多推荐了,返回首页