如上 网上找到的都是不稳定的 还不如自己搭建一个。去问度娘了,发现了一堆。好吧,那就动手开干吧。
准备工作(其实也是硬性条件):
1.服务器一台
2.备案域名一个。(好多都说可以不备案,我也不知道真假,我的备了)
工具:
1.远程连接工具:xshell 或者 putty 。(甭管是啥 能连上好使就行 按照个人习惯选择)
2.下载工具:winscp(这是我最爱用的哈) 当然用命令也是可以的。
安装:
1.git安装
# 安装git
yum -y install zlib-devel openssl-devel perl hg cpio expat-devel gettext-devel curl curl-devel perl-ExtUtils-MakeMaker hg wget gcc gcc-c++
这段命令是度娘告诉我的 那啥 要是不好使 就找个安装git的教程啥的 我这个执行完就ok了
由于ngrok是在go的基础上开发的所以先安装go(go语言完全不同 这不重要 安装好就可以)
2.安装go
我觉得服务器上下载go太慢了 所以我决定本地下载 在往服务器上传
下载地址:Go下载 - Go语言中文网 - Golang中文社区(我觉得这个挺好的)
下载linux版的 位数看好在下,这些细节问题一定要注意。
下载后 用winscp 上传到服务器下的 /usr/local/下
解压
tar -zxvf go1.12.4.linux-amd64.tar.gz /usr/local/
目录下即可看见 go 的目录
这时需要做一个软连接(为什么做 我也不知道啊 哪个大神可以指导一下)
# go的命令需要做软连接到/usr/bin
ln -s /usr/local/go/bin/* /usr/bin/
做完这些 最后设置全局的环境变量
export GOROOT=/usr/local/go
export GOPATH=$HOME/go
export PATH=$PATH:$GOROOT/bin
使环境生效
source /etc/profile
好了 到这 我们的go安装完了 检测安装是否安装成功
go version
go env
执行其中一个 出现对应的即可 代表安装成功
3.安装ngrok
为了查找方便 也安装到local目录下
cd /usr/local/
//ngrok下载地址
git clone https://github.com/inconshreveable/ngrok.git
这个地址可以git下载 再传上去 也可以fock到自己项目里
下载完成后可以看到一个 ngrok的文件夹
配置 ngrok的环境变量
export GOPATH=/usr/local/ngrok/
#这里写你自己的域名,不要前缀,比如www.abc.club 填写abc.club (域名已备案)
export NGROK_DOMAIN="abc.club"
4.生成ngrok证书并覆盖原有的证书
cd /usr/local/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 server.key 2048
openssl req -new -key server.key -subj "/CN=$NGROK_DOMAIN" -out server.csr
openssl x509 -req -in server.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out server.crt -days 5000
以上这个命令是拷来的 不必介意 就是生成证书的
覆盖证书 以下命令分着打 打完每一个 会让你确定 按 y 就可以
cp rootCA.pem assets/client/tls/ngrokroot.crt
cp server.crt assets/server/tls/snakeoil.crt
cp server.key assets/server/tls/snakeoil.key
到此 安装配置结束
生成服务端
进入ngrok的目录
cd /usr/local/ngrok/
执行生成服务端 其中amd64代表64位的linux系统 如果是32位的 改为:GOARCH=386
GOOS=linux GOARCH=amd64 make release-server
生成成功后 会在ngrok的bin下有一个ngrokd文件夹 即代表成功
生成客户端
和服务端一样
cd /usr/local/ngrok/
GOOS=windows GOARCH=amd64 make release-client
会在ngrok的bin下有一个windows_amd64文件夹 即代表成功
下面是不同系统生成不同客户端的版本 替换GOODS 和GOARCH的值即可
#Linux 平台 32 位系统:GOOS=linux GOARCH=386
#Linux 平台 64 位系统:GOOS=linux GOARCH=amd64
#Windows 平台 32 位系统:GOOS=windows GOARCH=386
#Windows 平台 64 位系统:GOOS=windows GOARCH=amd64
#MAC 平台 32 位系统:GOOS=darwin GOARCH=386
#MAC 平台 64 位系统:GOOS=darwin GOARCH=amd64
#ARM 平台:GOOS=linux GOARCH=arm
服务端的启动
在ngrock下执行
./bin/ngrokd -tlsKey=server.key -tlsCrt=server.crt -domain="abc.club" -httpAddr=":80" -httpsAddr=":443" -tunnelAddr=":4443"
参数说明:
#-domain 访问ngrok是所设置的服务地址生成证书时那个
#-httpAddr http协议端口 默认为80
#-httpsAddr https协议端口 默认为443
#-tunnelAddr 通道端口 默认4443
一定要注意 domain 代表 域名 那么这个域名就是之前你定义的环境变量的域名 千万不要错。
启动成功显示:
可以看出 监听80端口 443 端口 4443端口 并且30秒执行一次监听 启动成功
二级域名的映射设置
这个 跟简单 但很重要如下
用泛解析 解析一级域名 3级的还没研究 按照上面的解析就可以
客户端的启动
用winscp将生成的windows_amd64拉倒本地
里面只有一个ngrok.exe程序
同目录下新建ngrok.cfg文件 文件类型可自定义 但是执行时注意一致
ngrok.cfg内容
server_addr: "abc.club:4443"
trust_host_root_certs: false
server_addr: "abc.club:4443" 其中 abc.club还是你自己设置的那个域名 4443是服务区启动时的监听端口 保持一致 (改就都改 不改就不要动)
客户端有俩种启动方法:
1.cmd到windows_amd64根目录下
直接执行以下命令
ngrok -config=./ngrok.cfg -subdomain=test 8080
#参数说明
ngrok.cfg 刚才新建的文件
-subdomain=test test:穿透的域名前缀
8080 :穿透的域名映射端口
启动
代表成功 访问分配的域名即可
2.写一个.bat的脚本
boom.bat的内容
@echo OFF
color 0a
Title boom Ngrok启动工具
Mode con cols=109 lines=30
:START
set /p clientid= 请输入前缀:
echo.
set /p port= 请输入端口:
echo.
ngrok -config=ngrok.cfg -subdomain %clientid% %port%
PAUSE
goto TUNNEL
简单些 也可以弄一些图案什么的 根据个人喜好
访问分配的域名即可
图形界面
项目启动后 访问127.0.0.1:4040或者localhost:4040
将ngrok设置为系统服务 并且开机自启
编辑
vim /etc/rc.d/init.d/ngrok
ngrok内容
#!/bin/bash
#chkconfig: - 99 01
#description:ngrok
case "$1" in
start)
echo "start ngrok service.."
cd /usr/local/ngrok/
setsid ./bin/ngrokd -tlsKey=server.key -tlsCrt=server.crt -domain="abc.club" -httpAddr=":80" -httpsAddr=":443" -tunnelAddr=":4443"
;;
*)
exit 1
;;
esac
###参数说明:
### cd /usr/local/ngrok/:进入ngrok目录
### setsid:开始没有这个 结果关闭窗口 发现服务停掉了 加上目前好用
### setsid ./bin/ngrokd -tlsKey=server.key -tlsCrt=server.crt -domain="abc.club" -httpAddr=":80" -httpsAddr=":443" -tunnelAddr=":4443" :启动ngrok服务端命令
给该配置文件权限
chmod 755 ngrok
注册为系统服务
chkconfig --add ngrok
然后查看是否添加成功
chkconfig
启动
service ngrok start
若能出现和之前直接打命令出现的监听30s界面 则添加成功
设置为开机自启
再添加为系统服务后 ngrok状态都是off 所以需要设置为开机自启
systemctl enable ngrok.service //加入开机启动
systemctl daemon-reload //重新加载配置文件
重启服务器 直接开启客户端检测
注意事项
服务端 启动成功 客户端连不上:
是因为 防火墙 端口没有开放443 4443 8080 等 都开放一下
开放后可以关闭防火墙 没什么大用
开了之后 还是连不上 这就需要去云服务器端设置安全组的入站规则:
设置好就好了 搭建的还算可以 没有太多的问题 一路很顺
码字码图不易 且看且珍惜
如有问题 欢迎提出指导 谢谢