资讯专栏INFORMATION COLUMN

AWS搭建ngrok内网转发服务器

Yi_Zhi_Yu / 893人阅读

摘要:还有域名解析是否好了,能否通,可能你搭建环境是没有问题的,但是解析错了,那就悲剧了。

相信搞过微信开发、小程序的同学都踩过调试的坑,那种线上折腾通常能让你憋上一口老痰。当然你也可以找其他的方式进行内网转发,比如用QQ浏览器、别人已经搭建好的转发服务、使用ssh+nginx。这这几种我都使用过,为了省时间你值得拥有。但是最近看了ngrok的源码,基于golang,那我就来劲了,因为我最近刚好在折腾golang网络这一块的内容。所以就自己来吧
前提

1.记得看标题啊,我采用的是aws,所以意思你必须有一个服务器,必须有公网ip

2.再有就是你要有一个域名,如果你使用过别人提供的ngrok,就知道,别人都采用三级域名泛解析的方式。所以希望你有一个自己的域名。不然没办法走下去了。

3.环境:redhat7.3

必要工具
 yum install -y mercurial git vim wget

这个mercurialngrok强制要求的。

安装golang
# 下载`go` 
cd /usr/local
wget https://storage.googleapis.com/golang/go1.10.linux-amd64.tar.gz


# 解压  
tar -zxvf go1.10.linux-amd64.tar.gz -C /usr/local/  

# go的命令需要做软连接到/usr/bin 
ln -s /usr/local/go/bin/* /usr/bin/ 
设置go环境
#安装go语言的安装环境
yum install mercurial bzr subversion -y
#新建go目录作为项目目录
mkdir -p $HOME/go
#用cat的方法在尾部增加golang的环境:GOROOT GOPATH

#下面这段,整段复制粘贴过去
cat >>$HOME/.bash_profile<
检查一下goenv环境变量:
go env


看到GOPATH,GOROOT就可以了

ngrok 配置
下载:
cd /usr/local/  
git clone https://github.com/inconshreveable/ngrok.git
设置环境变量:
export GOPATH=/usr/local/ngrok/ 
 #这里写你自己的域名,建议你用二级域名,比如你有个域名为:baidu.com,那么这里就可以为:ngrok.baidu.com.  
export NGROK_DOMAIN="ngrok.xxx.com" 

当然你会问,为什么不直接使用baidu.com,而是用ngrok.baidu.com.如果你有限制的域名的话,当然是可以直接使用baidu.com的。

生成证书:
cd /usr/local/ngrok
openssl genrsa -out rootCA.key 2048  
#NGROK_DOMAIN 就是你上一步的步骤设置的域名
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 
拷贝证书覆盖ngrok原来的证书:
过程会让你输入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
生成服务端:
cd /usr/local/ngrok/  
make release-server
#这一步可能会出错的,我之所以会写这篇文章,是因为这个地方出现了好几次错误,容易崩溃

如果顺利的话,生成的服务端在/usr/local/ngrok/binngrokd文件.希望你可以一步到位

可能有的错误:
bin/go-bindata -nomemcopy -pkg=assets -tags=release   
        -debug=false   
        -o=src/ngrok/client/assets/assets_release.go   
        assets/client/...  
bin/go-bindata -nomemcopy -pkg=assets -tags=release   
        -debug=false   
        -o=src/ngrok/server/assets/assets_release.go   
        assets/server/...  
go get -tags "release" -d -v ngrok/...  
go install -tags "release" ngrok/main/ngrokd  
go install: cannot install cross-compiled binaries when GOBIN is set  
make: *** [server] Error 1
解决方法:
cd /usr/local/ngrok
mkdir bin  
cp $GOBIN/go-bindata bin/  
unset GOBIN

这里说明一下,默认下go getgo-bindata下载到GOBIN目录中了,所以你要把go-bindata复制到ngrokbin目录中,但是默认是没有这个bin目录的。

生成客户端:
我用的是mac系统,所以我只生成mac ngrok客户端,window的生成方法,可以参考底下参考文章
cd /usr/local/ngrok/ 
 
GGOOS=darwin GOARCH=amd64 make release-client 

#然后就是等待下载了,没有进度条,耐心等待。
#生成的在/usr/local/ngrok/bin/darwin_amd64 
#都在bin下,服务端是ngrokd   客户端是ngrok

到这一步基本算是安装完成了。

启动服务端
这里为了方便我直接就用80端口了,请确认你的80端口没有被占用,关闭相应的服务。
后面要想用,建议使用nginx反向代理到ngrok。
cd /usr/local/ngrok/bin
./ngrokd -domain="xxx.com" -httpAddr=":80" -httpsAddr=":443" -tunnelAddr=":4443"

#-domain后面你上面写的域名,如上面写的:ngrok.baidu.com  -httpAddr http端口  -httpsAddr https 端口 默认为:443
#-tunnerlAddr 客户端端口,连接端口,默认为:4443

启动客户端
先将服务器生成的客户端ngrok下载到本地,aws下载的命令如下(不是aws,就用scp就可以了):
scp -i "aa.pem" ec2-user@ec2-34-201-46-244.compute-1.amazonaws.com:/usr/local/ngrok/bin/darwin_amd64 /ngrok

然后同目录下创建文件ngrok.cfg 配置文件:

server_addr: "ngrok.xxx.com:4443"   #你上面自己写的域名,如ngrok.baidu.com
trust_host_root_certs: false  


#目录下打开命令行
./ngrok -config=./ngrok.cfg -subdomain=blog 80 -log=ngrok.log
#这里subdomain后面是你的三级域名前缀,你可以改
#注意要在域名解析里添加三级域名解析
#最好添加一个log, 不然出错了,容易一脸懵逼

这样就可以了,然后在访问blog.ngrok.xxx.com就可以访问了。

域名解析
可能有些小伙伴没有怎么解析过三级域名。这里就短暂说一下。

首先把你的二级域名解析到aws的ip上,如下图

再添加一个三级域名解析:

这样就可以了,其实还是比价简单的。

特别提醒

如果你是新的服务器,比如aws,默认有些端口是没有开启的(去安全组设置就好了)。所以你上面如果采用了其他的端口,先确定是否可用。不信的话你去telnet 4443端口试一下。还有域名解析是否好了,能否ping通,可能你搭建环境是没有问题的,但是解析错了,那就悲剧了。

telnet ngrok.baidu.com 4443
ping ngrok.baidu.com
aws 如果是自己免费申请的,不用的时候记得关闭,不然超时那也要掏钱的。
参考文章

https://github.com/inconshrev...

https://blog.csdn.net/yjc_111...

https://blog.csdn.net/gebitan...

https://blog.csdn.net/qq_3656...

https://segmentfault.com/a/11...

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/30793.html

相关文章

  • ngrok内网穿透务器搭建及配置(附 frp 配置)

    摘要:作为一个内网穿透的小工具,有时可能会时常更改配置等,所以作为本地的一个开机启动的小服务即可。设置开机启动输入命令设置开机启动开启查看状态停止内网穿透配置相对于另一款国内大牛做的要显的更加轻量安全易配置些。 12月18日更新 添加 frp 配置 前言 内网穿透,无需多言,用处多多。首先强力推荐一款Sunny大大搭建的ngrok服务好用的不行,而且有免费选项,感觉平时够用了。那么,为什么自...

    李昌杰 评论0 收藏0
  • Koa2微信公众号开发(一) 本地开发调试环境搭建

    摘要:本篇是该系列的第一篇,本地开发环境搭建以及接入微信。若确认此次请求来自微信服务器,原样返回参数内容,则接入生效,成为开发者成功,否则接入失败。 一、简介 关于微信公众号的介绍就省略了,自行搜索。注册过程也不说了。我们会直接注册测试号来实现代码。这将会是个全面讲解微信公众号开发的系列教程。本篇是该系列的第一篇,本地开发环境搭建以及接入微信。在开始之前最好去看看开发者文档微信公众平台技术文...

    snifes 评论0 收藏0
  • NodeJs开发微信公众号(一)

    摘要:古话说万事开头难回头细想想还真是这样在没有开始做微信公众号开发之前我以为它很复杂但是学过之后只想说原来这里是我的项目的地址下面我就把我的学习过程做一下总结希望可以帮助到有需要的人儿粗鄙之见恐有不足欢迎指教在阅读下文之前你应该对和框架有一定的 古话说: 万事开头难, 回头细想想还真是这样,在没有开始做微信公众号开发之前我以为它很复杂,但是学过之后只想说原来just so so~ 这里是我...

    tigerZH 评论0 收藏0

发表评论

0条评论

Yi_Zhi_Yu

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<