搭建ngrok常见错误
问题处理
1. Failed to read valid http request: malformed HTTP request
[2019/05/07 17:11:36 CST] [DEBG] (ngrok/log.(*PrefixLogger).Debug:79) [ctl:12defafc] Waiting to read message
[2019/05/07 17:11:46 CST] [DEBG] (ngrok/log.(*PrefixLogger).Debug:79) [ctl:12defafc] Closing
[2019/05/07 17:11:46 CST] [EROR] (ngrok/log.Error:120) control recovering from failure EOF
服务端⽇志
[09:11:23 UTC 2019/05/07] [WARN] (ngrok/log.(*PrefixLogger).Warn:87) [pub:662c9e97] Failed to read valid https request: malformed HTTP request "\u0 [09:11:49 UTC 2019/05/07] [INFO] (ngrok/log.(*PrefixLogger).Info:83) [metrics] Reporting: {"unt":0,"unt":0,"unt":0,"connMeter.
检查 ngrok.cfg ⽂件⾥的端⼝号是否与 Listening for control and proxy connections on [::]:4443 端⼝号⼀致。
2.[EROR] (ngrok/log.Error:120) control recovering from failure dial tcp: on 100.8.8.8:100: no such
host
DNS解析不了, 将IP域名写⼊ /etc/hosts 即可
3.
[EROR] (ngrok/log.Error:120) control recovering from failure dial tcp 52.194.135.42:4433: connectex: A connection
attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond.
相应端⼝没开,安全组或防⽕墙放⾏
4.
……Failed to read message: remote error: bad certificate……
检查 ngrok.cfg ⽂件⾥域名是否与你建⽴证书时的域名⼀致。
检查客户端机器系统时间,是否为当前年⽉⽇。
搭建教程
第⼀步:安装go编译环境(ngrok是go语⾔开发的)
2、解压go到 /usr/local/go
3、建链接: ln -s /usr/local/go/bin/* /usr/bin/
第⼆步:下载ngrok源码
Bash
cd /usr/local/src/
git clone github/inconshreveable/ngrok.git
export GOPATH=/usr/local/src/ngrok/
export NGROK_DOMAIN="ngrok.zpblog"
cd ngrok
第三步:⽣成⾃签名证书
使⽤ngrok官⽅服务时,我们使⽤的是官⽅的SSL证书。⾃建ngrokd服务,我们需要⽣成⾃⼰的证书,并提供携带该证书的ngrok 客户端。
Bash
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 - -days 5000
cp rootCA.pem assets/client/
assets/server/
cp device.key assets/server/tls/snakeoil.key
第四步:开始编译服务端和客户端
1、服务端
服务端⽐较容易,先指定⼀下我的环境变量,然后再make:
Bash
GOOS=linux GOARCH=amd64
#如果是32位系统,这⾥ GOARCH=386
然后make
Bash
make release-server
按理讲,应该就可以编译成功了,但是我发现,编译的时候很多依赖包是需要⾃动下载的,有⼀个包
log4go 会提⽰访问不到,修改源码,将该包改为 github 上的地址:
到 /usr/local/src/ngrok/src/ngrok/ ,第五⾏import中的 log 包,改为: log "github/keepeye/log4go"
然后重新 make release-server
编译成功后,应该可以在 /usr/local/src/ngrok/bin 下⽣成了⼀个 ngrokd 可执⾏⽂件,这就是我们的服务端了,现在启动服务端试试:
Bash
bin/ngrokd -domain="$NGROK_DOMAIN" -httpAddr=":8000" -httpsAddr=":4433"
如果没有报错的话,会出现以下输出:
Bash
[13:15:43 CST 2016/02/25] [INFO] (ngrok/log.(*PrefixLogger).Info:83) [registry] [tun] No affinity cache specified
[13:15:43 CST 2016/02/25] [INFO] (ngrok/log.(*PrefixLogger).Info:83) [metrics] Reporting every 30 seconds
[13:15:43 CST 2016/02/25] [INFO] (ngrok/log.Info:112) Listening for public http connections on [::]:8000
[13:15:43 CST 2016/02/25] [INFO] (ngrok/log.Info:112) Listening for public https connections on [::]:4433
[13:15:43 CST 2016/02/25] [INFO] (ngrok/log.Info:112) Listening for control and proxy connections on [::]:4443
现在先 ctrl+c 退出,我们还需要编译客户端呢。
2、客户端
1.1、windows客户端
GOOS=windows GOARCH=amd64 make release-client
cd /usr/local/go/src
GOOS=windows GOARCH=amd64 ./make.bash
cd -
GOOS=windows GOARCH=amd64 make release-client
#这⾥的amd64是64位系统,32位改成386
#应该会在 bin/windows_amd64 ⽬录下⽣成ngrok客户端程序
1.2、树莓派客户端
go语言安装教程cd /usr/local/go/src
GOOS=linux GOARCH=arm ./make.bash
cd -
GOOS=linux GOARCH=arm make release-client
#应该会在 bin/linux_arm ⽬录下⽣成ngrok客户端程序
1.3 mac
GOOS=darwin GOARCH=amd64 make release-client
执⾏完bin⽬录下⽣成相对应的windows、mac⽬录,就存放在对应⽬录下。将对应的下载到本地。
按之前的⽅式启动服务端ngrokd,有以下提⽰:
./bin/ngrokd -tlsKey=server.key - -domain="" -httpAddr=":80" -httpsAddr=":443"
Listening for public http connections on [::]:8000
Listening for public https connections on [::]:4433
Listening for control and proxy connections on [::]:4443
记住这两个端⼝ 8000 和 4443 。
8、设置本地客户端
(1)在同级⽬录下新建⼀个配置⽂件ngrok.cfg
server_addr: ":4443"
trust_host_root_certs: false
注意,配置⽂件中⽤的是4443端⼝。
(2)同级⽬录下新建⼀个启动脚本startup.bat
@echo on
cd %cd%
#ngrok -proto=tcp 22
#ngrok start web
ngrok -config=ngrok.cfg -log=ngrok.log -subdomain=yjc 8080
其中,-config指向配置⽂件,-log存放⽇志⽂件位置,-subdomain为⾃定义的域名前缀。8080为端⼝号。(3)启动,点击启动脚本startup.bat完成启动或者cmd运⾏以下命令。
./ngrok -config=./ngrok.cfg -subdomain=test 80
解释⼀下参数:
Bash
-config 就是上⾯配置⽂件ngrok.cfg的路径
-subdomain 就是需要分配域名的前缀部分
80 就是本机websever的端⼝,⽐如apache监听的端⼝,⼀会ngrok会将请求映射到该端⼝上。
出现以下的输出:
Bash
Tunnel Status online
Version 1.7/1.7
Forwarding k.zpblog:8000 -> 127.0.0.1:80
Forwarding k.zpblog:8000 -> 127.0.0.1:80
Web Interface 127.0.0.1:4040
# Conn 0
Avg Conn Time 0.00ms
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论