ubuntu安装ngrok并使用nginx代理

之前一直使用的是国内的一个免费ngrok服务,但是今天突然发现用不了了,索性就在自己的linode上面搭建个ngrok服务吧,用着也省心,下面是安装过程。

升级软件包,安装依赖

首先先升级下软件包,这样可以确定系统是最新的,然后安装依赖包。终端下输入:

sudo apt-get update
sudo apt-get upgrade
sudo apt-get install curl git mercurial make binutils bison gcc build-essential
#安装gvm,安装golang会用到
bash < <(curl -s -S -L https://raw.githubusercontent.com/moovweb/gvm/master/binscripts/gvm-installer)
#使gvm的环境变量生效
source /root/.gvm/scripts/gvm

安装golang

终端下输入:

gvm install go1.4
gvm use go1.4 --default

安装ngrok

安装好golang之后就可以安装ngrok了,首先获得ngrok的源码:

cd ~
git clone https://github.com/inconshreveable/ngrok.git
cd ngrok
#设置domain域名,注意改成你自己的
export NGROK_DOMAIN="ngrok.lylinux.org"

生成证书:

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
cp rootCA.pem assets/client/tls/ngrokroot.crt
cp device.crt assets/server/tls/snakeoil.crt
cp device.key assets/server/tls/snakeoil.key

接下来就可以编译了:
GOOS=windows GOARCH=amd64 make release-server release-client
编译完成之后这只是linux的版本,如果要在windows下使用,需要交叉编译:

cd /root/.gvm/gos/go1.4/src
GOOS=windows GOARCH=amd64 CGO_ENABLED=0 ./make.bash
#编译windows版本的ngrok
cd ~/ngrok
GOOS=windows GOARCH=amd64 make release-server release-client

编译完成后的bin目录应该使这样的
ngroktree

服务端和客户端

至此基本差不多完成了,下面就可以启动服务端和客户端了,终端下输入

cd ~/ngrok/bin/
./ngrokd -domain="ngrok.lylinux.org" -httpAddr=":8081" -httpsAddr=":8089"

如果输出类似于这样的,说明成功了:
ngrokserver

然后可以使用客户端了,在编辑ngrok.cfg,输入:
ngrok -config=ngrok.cfg -subdomain test 80
test是域名前缀,80是本地端口
如果看到这样的输出,那么应该是成功的。
ngrokclient

接下来就是域名解析了,添加一条A记录*.ngrok解析到服务器地址,等解析生效之后打开
http://test.ngrok.lylinux.org:8081可以看到已经成映射到公网了:
ngrokclient

配置nginx代理

最后一个问题,就是微信公共平台等只支持80端口的,但是我vps的80端口已经被nginx用了,所以ngrok无法再使用80端口,怎么办呢?既然已经有了nginx,那么直接反向代理走起~~,创建一个新的配置文件,输入:

server {
        server_name     ~^(?<subdomain>\w+)\.ngrok\.lylinux\.org$;
        listen 80;
        keepalive_timeout 70;
        proxy_set_header "Host" $host:8081;
        location / {
                proxy_pass_header Server;
                proxy_redirect off;
                proxy_pass http://127.0.0.1:8081;
        }
        access_log off;
        log_not_found off;
}

端口号要和上面配置的端口号一致,这样不用输端口号就可以直接使用代理了~~。

ubuntu安装ngrok并使用nginx代理》上有1条评论

发表评论

电子邮件地址不会被公开。 必填项已用*标注