说明
本文主要是将服务器接收到的请求转发到本地服务器,这样便于调试。
网上公开的域名转发工具,百度上搜到的工具: 例如 sunny-ngrok 等,有些说是 免费注册 但不太稳定,而且安装方法要加QQ群收费等。
所以,最终还是自己搭建转发服务器的方式比较靠谱。
那么,寻找搭建自己转发服务器的方法,找到这篇文章:
最接地气的Ngrok服务器搭建教程
https://www.jianshu.com/p/f5c2a55e77bd
在这个基础上稍为修改,得到的本篇博客。
主要步骤
本文是在 centos 服务器安装测试的,测试成功
一,安装git和go
yum install gcc -y
yum install git -y
yum install mercurial git bzr subversion golang golang-pkg-windows-amd64 golang-pkg-windows-386 -y
二,下载源码
git clone https://github.com/inconshreveable/ngrok.git
三,生成证书(默认的证书是 ngrok.com,我们需要改成 abc.com)【这里的 NGROK_DOMAIN 环境变量存在问题。因为没有用到 https 所以不管他】
生成:
cd ngrok
mkdir cert
cd cert
export NGROK_DOMAIN="abc.com"
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
替换(提示overwrite输入y)
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目录
以下命令按需生成
<!--linux服务端-->
GOOS=linux GOARCH=386 make release-server (32位)
GOOS=linux GOARCH=amd64 make release-server(64位)
<!--Mac OS客户端-->
GOOS=darwin GOARCH=386 make release-client
GOOS=darwin GOARCH=amd64 make release-client
<!--windows客户端-->
GOOS=windows GOARCH=386 make release-client
GOOS=windows GOARCH=amd64 make release-client
启动服务器:
./bin/ngrokd -domain="abc.com" -httpAddr=":8080"
外网的服务器开放端口 8080,需要在 阿里云 【安全组中开放此端口】 其它配置:
-httpAddr=80 此配置用来指定映射域名http访问的端口 默认80
-httpsAddr=443 https的访问端口 默认443
-tunnelAddr=4443 客户端连接的端口 默认4443 需要在 阿里云 【安全组中开放此端口】
五:客户端配置与连接
执行生成客户端后,根据不同平台客户端存在不同的文件夹:
Mac os
bin/darwin_386 (32位)
bin/darwin_amd64 (64位)
windows
bin/windows_386
bin/windows_amd64
进入对应的文件夹,通过sz或者ftp等方式将ngrok下载到你需要使用客户端的电脑中
在客户端中,新建配置文件ngrok.cfg
<!--配置服务端连接地址,也就是基础域名。端口则与服务端-tunnelAddr配置相同-->
server_addr: "abc.com:4443"
trust_host_root_certs: false
运行客户端
./bin/ngrok -config=ngrok.cfg -subdomain=ngrok 8080
-subdomain用来指定域名的前缀(也就是映射域名的前缀),如上设置ngrok,当访问ngrok.abc.com时,ngrok服务端接收到请求后,便会将客户端http相应返回给访问端。80用来指定本地http服务的端口
【需要在域名解析中添加子域名 ngrok.abc.com, A 记录 对应到服务器上面 】
问题及解决
Tunnel ngrok.xxx.cn:8080 not found
需要写成具体的域名
./ngrokd -domain="xxxx.cn" -httpAddr=":8080"
Invalid Host header
【问题原因】本地启用了一个 vue 的项目,占用了 8080 端口,造成转发不过来。
当时还以为是 Java 的 SpringBoot 拦截了这个请求呢~