您的位置:首页 > 运维架构 > Nginx

nginx+ngrok的配置

2015-11-29 15:40 731 查看
上篇文章介绍了用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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: