我是靠谱客的博主 魁梧纸鹤,最近开发中收集的这篇文章主要介绍搭建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 "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常见错误问题处理 搭建教程所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(90)

评论列表共有 0 条评论

立即
投稿
返回
顶部