ngrok服务器搭建

2021/9/9 ngrok

# 一、环境准备

# 1、安装git

yum install git
1

# 2、安装golang

  • 1、下载go1.7
  • 2、安装go并配置系统环境变量
# 解压到指定位置
tar -xzf  /usr/local  -C go1.12.5.linux-amd64.tar.gz
# 配置环境变量
vim /etc/profile
# 文件尾部追加
export GOROOT=/usr/local/go
export PATH=$GOROOT/bin:$PATH
# 刷新
source /etc/profile
1
2
3
4
5
6
7
8
9

提示

  • go其他版本下载:https://golang.google.cn/dl,或者用 gvm (opens new window)
  • 不用go最新版本原因:新版本go的证书需要SAN扩展的证书
    • https://github.com/fatedier/frp/blob/dev/README_zh.md
    • https://gist.github.com/lyoshenka/002b7fbd801d0fd21f2f

# 二、下载编译ngrok

# 1、下载ngrok

# 如果当前在/home文件夹下
mkdir /ngrok
cd /ngrok
 
# 这一步有点小慢,可以切换到码云
git clone https://github.com/inconshreveable/ngrok.git
# 或者把https改成git
git clone git://github.com/inconshreveable/ngrok.git
# 或者用码云地址
git clone https://gitee.com/judademimi/ngrok.git
1
2
3
4
5
6
7
8
9
10

# 2、生成证书文件

# 进入到下载后的文件
cd ngrok
# 定义一个变量后面使用,指定你的域名
NGROK_DOMAIN="weileng.top"
# 生成证书
openssl genrsa -out rootCA.key 2048
openssl req -new -x509 -nodes -key rootCA.key -days 10000 -subj "/CN=$NGROK_DOMAIN" -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 -days 10000 -out device.crt
# 把生成的证书替换自带的
cp rootCA.pem assets/client/tls/ngrokroot.crt
cp device.crt assets/server/tls/snakeoil.crt
cp device.key assets/server/tls/snakeoil.key
1
2
3
4
5
6
7
8
9
10
11
12
13
14

# 3、编译服务端和客户端

所有的命令执行都要在ngrok根目录下执行,如我的是:/home/ngrok/ngrok

# 如果换了go版本,建议先执行下这个,如果没有可以不执行,因为会删除一些文件重新下载
# make clean 
#编译ngrokd(服务器端)默认是linux版本
make release-server

#编译ngrok(客户端)默认是linux版本
make release-client
1
2
3
4
5
6
7

其他版本编译说明

# linux服务端/客户端
GOOS=linux GOARCH=386 make release-server #(32位)
GOOS=linux GOARCH=amd64 make release-server #(64位)

GOOS=linux GOARCH=386 make release-client #(32位)
GOOS=linux GOARCH=amd64 make release-client #(64位)

# linux arm64内核 uname -a 显示 aarch64
GOOS=linux GOARCH=arm64 make release-client

# Mac OS服务端/客户端
GOOS=darwin GOARCH=386 make release-server
GOOS=darwin GOARCH=amd64 make release-server

GOOS=darwin GOARCH=386 make release-client
GOOS=darwin GOARCH=amd64 make release-client

# windows服务端/客户端
GOOS=windows GOARCH=386 make release-server
GOOS=windows GOARCH=amd64 make release-server

GOOS=windows GOARCH=386 make release-client
GOOS=windows GOARCH=amd64 make release-client
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

# 三、服务器部署和客户端启动

# 1、服务端启动

# 使用默认配置启动,当前路径在/home/ngrok/ngrok文件夹
./bin/ngrokd -domain="weileng.top"
# 使用自定义配置
./bin/ngrokd -tlsKey="device.key" -tlsCrt="device.crt" -domain="weileng.top"  -httpAddr=":88" -httpsAddr=":444" -tunnelAddr=":4444"

# 后台启动
setsid ./bin/ngrokd -domain="weileng.top" &
1
2
3
4
5
6
7

参数说明:

  • -httpAddr=":88" http服务的访问端口 默认80
  • -httpsAddr=":444" https服务的访问端口 默认443
  • -tunnelAddr=":444" 客户端连接服务端的端口 默认4443
  • -tlsKey="device.key" 默认assets/server/tls/snakeoil.key
  • -tlsCrt="device.crt" 默认assets/server/tls/snakeoil.crt

# 、2客户端启动

  • 1、将编译好的客户端复制到客户端机器
  • 2、在客户端同路径下创建配置文件ngrok.cfg,文件为yaml格式,例子如下:
server_addr: "weileng.top:4443"
trust_host_root_certs: false
tunnels:
  mysql: # 映射数据库
    remote_port: 6603
    proto:
      tcp: 3306
  ssh: # 映射远程
    remote_port: 3333
    proto:
      tcp: 22
  ftp: # 映射ftp
    remote_port: 20
    proto:
      tcp: 20
  ftp2:
    remote_port: 21
    proto:
      tcp: 21
  http:
    subdomain: ngrok
    proto:
      http: 1024
      https: 192.168.0.100:443
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24

  • 3、启动客户端
# linux或者mac需要需要赋予客户端可执行权限
chmod +x ngrok
# 不实用配置文件,自定义一个映射
./ngrok -config ngrok.cfg -log=ngrok.log -subdomain=myweb 1024
# 使用配置文件中的所有配置
./ngrok -log=ngrok.log start-all
# 启动配置文件中的部分配置
./ngrok -config ngrok.cfg start ssh mysql
1
2
3
4
5
6
7
8
  • 4、windows可以自定义一个脚本,start.bat
@echo OFF
color 0b
Title Ngrok启动程序 By 微冷
Mode con cols=109 lines=30
:START
ECHO.
Echo          =========================================================
ECHO.
Echo                                 Ngrok启动
ECHO.
Echo                                 作者: 微冷
ECHO.
Echo          =========================================================
Echo.
echo.
echo.
:TUNNEL
Echo           输入需要启动的域名前缀,如“test” 请勿使用“www”,即分配给你的穿透域名为:“test.example.cn”
ECHO.
ECHO.
ECHO.
set /p clientid=   请输入域名前缀:
echo.
set /p port=   请输入内网端口:
echo.
ngrok -config=ngrok.cfg -log=ngrok.log -subdomain=%clientid% %port%
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26

# 四、nginx配置,完全使用域名

配置nginx.conf文件

# ngrok代理
  # 在配置文件中添加
  server {
    listen       80;
    server_name  *.ngrok.weilengt.top ngrok.weilengt.top;

    location / {
      proxy_pass	http://localhost:99;  # 后面的端口对应的是ngrok服务启动时httpAddr对应的值
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header Host $http_host;
      proxy_set_header Cookie $http_cookie;
      proxy_set_header X-Forwarded-Proto https;
      proxy_redirect off;
      proxy_connect_timeout      240;
      proxy_send_timeout         240;
      proxy_read_timeout         240;
    }

    #解决配置反向代理后js css文件无法加载问题
    location ~ .*\.(js|css)$ {
      proxy_pass http://localhost:99;
      proxy_set_header Host $host:99;   # $host 指的是与server_name相同的域名
    }
  }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24

不用80端口多为http监听时,域名后不加端口配置

# ngrok代理
  server {
    listen       80;
    server_name  *.ngrok.weileng.top;

    location / {
      proxy_pass http://abc.ngrok.weileng.top:99;
      proxy_set_header Host $host:99;
      proxy_redirect off;
      client_max_body_size 10m;
      client_body_buffer_size 128k;
      proxy_connect_timeout 90;
      proxy_read_timeout 90;
      proxy_buffer_size 4k;
      proxy_buffers 6 128k;
      proxy_busy_buffers_size 256k;
      proxy_temp_file_write_size 256k;
    }

    #解决配置反向代理后js css文件无法加载问题
    location ~ .*\.(js|css)$ {            
      proxy_pass http://abc.ngrok.weileng.top:99;
      proxy_set_header Host $host:99;
    }
  }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25

./bin/ngrokd -domain="ngrok.weileng.top" -httpAddr=":99" -httpsAddr=":9999" -tunnelAddr=":4443"

# 五、参考文档

http://ngrok.cn/docs.html (opens new window)

留言:
    更新日期: 2022/2/8 下午11:10:51