Centos6.5搭建Ngrok反向代理服务器

ngrok使用go语言编写的反向代理软件,通过在公共的端点和本地运行的 Web 服务器之间建立一个安全的通道。ngrok 可捕获和分析所有通道上的流量,便于后期分析和重放。在官方网站注册账户即可使用,无需自己搭建,缺点:速度慢且需翻墙,可自行搭建服务器解决上述问题。对于本地开发或内网穿透ngrok可以轻松解决

搭建Ngrok服务器

软件安装与使用

  • 一台拥有公网ip的服务器或者vps(虚拟专用服务器)需要一个自己的域名。已有域名的,可以建立一个子域名,用于关联ngrok服务,这样也不会干扰原先域名提供的服务。此处使用:ngrok.xiaoujia.com,如果此域名做了CDN加速,需要将域名回源,在域名提供商处做DNS泛域名解析,此处用的是万网DNS域名解析

  • 下载并安装git,用于下载ngrok源码,具体参考《7.Git安装使用》此处不在赘述,但是建议使用源码安装,尽量不要使用YUM安装
  • 安装依赖工具

安装perl-ExtUtils-MakeMaker以及mercurial
yum install -y perl-ExtUtils-MakeMaker mercurial

  • 下载并安装Golang

Golang是编译ngrokd和ngrok所必须的,建议直接从golang官网下载对应平台的源码包;
http://www.golangtc.com/static/go/go1.4.2.linux-amd64.tar.gz
百度云盘下载地址:https://pan.baidu.com/s/1pL0Ca4V#list/path=%2F
当然也可以使用yum安装
解压到指定目录:tar -zxvf go1.4.2.linux-amd64.tar.gz -C /usr/local
go的命令需要做软连接到/usr/bin,方便下次使用可不用全路径:ln -s /usr/local/go/bin/* /usr/bin/
测试软连接是否成功:go version

  • 下载并安装ngrok
1
2
3
cd /usr/local/src/
git clone https://github.com/inconshreveable/ngrok.git
cd ngrok
  • 配置环境变量:vim /etc/profile 在此文件中加入环境变量
1
2
3
export GOPATH=/usr/local/src/ngrok/ # 此处是ngrok安装目录
export NGROK_DOMAIN="ngrok.xiaoujia.com" #此处是配置的域名
配置完成后,执行命令:source /etc/profile 使配置生效
  • 为域名生成证书
1
2
3
4
5
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
  • 在执行上面命令的目录下面会生成一些证书文件,我们需要把这些文件拷贝到指定位置
1
2
3
cp rootCA.pem assets/client/tls/ngrokroot.crt
cp device.crt assets/server/tls/snakeoil.crt
cp device.key assets/server/tls/snakeoil.key
  • 如果是在天朝的服务器需要做如下修改,香港或者国外的服务器不需要

vim /usr/local/src/ngrok/src/ngrok/log/logger.go在此文件中加入 log “github.com/keepeye/log4go”
香港和国外服务器使用默认的第一个地址即可,但是在天朝,由于google被墙因此不能使用,因此删掉默认1号地址,使用2号地址接客

  • 指定环境变量,编译服务端
1
2
cd /usr/local/go/src
GOOS=linux GOARCH=amd64 ./make.bash #如何确认GOOS和GOARCH,可以通过go env来查看


如果是32位系统,这里 GOARCH=386

1
2
cd - 回到上一次目录,此处是回到ngrok目录
GOOS=linux GOARCH=amd64 make release-server

如果git版本较低或者使用yum安装git的话,执行到下面命令时会卡住,因此安装git时建议安装最新git

  • 编译客户端

客户端是需要和服务端匹配的,在编译的时候是要指定域名证书的,所以不用担心别人用其他的客户端去连你的服务端。如果不指定GOOS,默认编译出来的是Linux客户端
(1)如果是mac os 64位操作系统

1
2
3
4
5
6
7
8
9
cd /usr/local/go/src
GOOS=darwin GOARCH=amd64 ./make.bash
cd - 回到上一次目录,此处是回到ngrok目录
GOOS=darwin GOARCH=amd64 make release-client
如果是64位windows
cd /usr/local/go/src
GOOS=windows GOARCH=amd64 ./make.bash
cd - 回到上一次目录,此处是回到ngrok目录
GOOS=windows GOARCH=amd64 make release-client

将编译完成的客户端拷贝到个人windows机器

(2)如果是64位linux

1
2
3
4
cd /usr/local/go/src
GOOS=linux GOARCH=amd64 ./make.bash
cd - 回到上一次目录,此处是回到ngrok目录
GOOS=linux GOARCH=amd64 make release-client

  • 在windows客户端目录下创建配置文件ngrok.cfg,并加入如下内容
1
2
server_addr: "ngrok.xiaoujia.com:4443"
trust_host_root_certs: false
  • 在liunx上启动服务器端
1
2
3
/usr/local/src/ngrok/bin/ngrokd -domain="$NGROK_DOMAIN" -httpAddr=":服务器端启动端口"
例如:-httpAddr=":8080" -httpsAddr=":8081"
sudo nohup /usr/local/src/ngrok/bin/ngrokd -domain="$NGROK_DOMAIN" -httpAddr=":8000" &

想要停止可以使用
ps -A #找到PID
kill xxxid

  • 在windows上启动客户端
1
2
3
4
5
ngrok -config=ngrok.cfg -subdomain=自定义域名前缀 本地映射项目端口
-config 就是上面配置文件ngrok.cfg的路径
-subdomain 就是需要分配域名的前缀部分
ngrok -config=ngrok.cfg -subdomain=yf 8888
8888 就是本机websever的端口,比如apache监听的端口,一会ngrok会将请求映射到该端口上。

之后,ngrok服务端就会将请求转发到我们本地客户端,再由客户端转发给我们的webserver 指定端口

停止ngrok服务器

常见问题

80端口被其它应用占用如何处理

不得不提nginx是个牛逼的软件,ngrok服务器端采用非80端口启动,例如8181,我们可以在nginx中配置一个80 server,就绑定*.ngrok.xiaoujia.com范域名,然后将所有请求转发到ngrok服务端启动时的端口,
这就是反向代理。我发一下自己的nginx配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
upstream nodejs {
server 127.0.0.1:8000;
keepalive 64;
}
server {
listen 80;
server_name *.ngrok.xiaoujia.com;
access_log /var/log/nginx/access.ngrok.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://nodejs;
}
}

文章目录
  1. 1. 搭建Ngrok服务器
    1. 1.1. 软件安装与使用
    2. 1.2. 停止ngrok服务器
  2. 2. 常见问题
    1. 2.1. 80端口被其它应用占用如何处理