概述
问题处理
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 "u007fx00x00x00x00x00x00x00{"Type":"Auth","Payload":{"Version":"2","MmVersion":"1.7","User":"","Password":"","OS":"windows","Arch":"amd64","ClientId":""}}"
[09:11:49 UTC 2019/05/07] [INFO] (ngrok/log.(*PrefixLogger).Info:83) [metrics] Reporting: {"bytesIn.count":0,"bytesOut.count":0,"connMeter.count":0,"connMeter.m1":0,"httpTunnelMeter.count":0,"linux":0,"osx":0,"other":0,"tcpTunnelMeter.count":0,"tunnelMeter.count":0,"tunnelMeter.m1":0,"windows":0}
检查 ngrok.cfg 文件里的端口号是否与 Listening for control and proxy connections on [::]:4443 端口号一致。
2.[EROR] (ngrok/log.Error:120) control recovering from failure dial tcp: lookup ngrok.xxx.com 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语言开发的)
1、下载go:http://www.golangtc.com/download 下载和你服务器系统对应的版本即可。我的系统是CentOS 64位,我下载的是 go1.6rc2.linux-amd64.tar.gz
2、解压go到 /usr/local/go
3、建链接: ln -s /usr/local/go/bin/* /usr/bin/
第二步:下载ngrok源码
Bash
cd /usr/local/src/
git clone https://github.com/inconshreveable/ngrok.git
export GOPATH=/usr/local/src/ngrok/
export NGROK_DOMAIN="ngrok.zpblog.cn"
cd ngrok
第三步:生成自签名证书
使用ngrok.com官方服务时,我们使用的是官方的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 -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
第四步:开始编译服务端和客户端
1、服务端
服务端比较容易,先指定一下我的环境变量,然后再make:
Bash
GOOS=linux GOARCH=amd64
#如果是32位系统,这里 GOARCH=386
然后make
Bash
make release-server
按理讲,应该就可以编译成功了,但是我发现,编译的时候很多依赖包是需要自动下载的,有一个包
log4go 会提示访问不到,修改源码,将该包改为 github 上的地址:
找到 /usr/local/src/ngrok/src/ngrok/log/logger.go ,第五行import中的 log 包,改为: log "github.com/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、树莓派客户端
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目录,ngrok.exe就存放在对应目录下。将对应的ngrok.exe下载到本地。
按之前的方式启动服务端ngrokd,有以下提示:
./bin/ngrokd -tlsKey=server.key -tlsCrt=server.crt -domain="xxx.xyz" -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: "xxx.xyz: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 http://test.ngrok.zpblog.cn:8000 -> 127.0.0.1:80
Forwarding https://test.ngrok.zpblog.cn:8000 -> 127.0.0.1:80
Web Interface 127.0.0.1:4040
# Conn 0
Avg Conn Time 0.00ms
最后
以上就是魁梧纸鹤为你收集整理的搭建ngrok常见错误问题处理 搭建教程的全部内容,希望文章能够帮你解决搭建ngrok常见错误问题处理 搭建教程所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复