目录

  • 1.安装前置软件
  • 2.go语言环境
  • 3.下载Ngrok
  • 4.详细配置
  • 5.问题与解决方案

1.安装前置软件

安装git
#安装命令
yum -y install git

2.go语言环境

1.安装go语言并解压到/usr/local/目录下,目录可以自己换别的,go语言版本也可以换高级点的

wget https://storage.googleapis.com/golang/go1.12.0.linux-amd64.tar.gz
tar -C /usr/local/ -zxvf go1.12.0.linux-amd64.tar.gz

2.配置go语言的环境变量
1)打开配置文件

vi /etc/profile

2)在最下面新增以下代码

export GOROOT=/usr/local/go
export PATH=$PATH:$GOROOT/bin

3)重新加载配置文件

source /etc/profile

3)验证go是否安装成功

go version

结果显示版本信息就表示安装成功

[root@localhost bin]# go version
go version go1.12.0 linux/amd64

3.下载Ngrok

1)使用大佬已处理好依赖的ngrok文件
下载下来会有一个ngrok文件夹,里面有ngrok压缩包,此时将这个ngrok下载到/usr/中,后面解压后就没用了,可以删除这里下载的ngrok文件夹

cd /usr/
git clone https://github.com/haungjianli/ngrok

2)解压里面的ngrok压缩包
这里解压的ngrok是真正的ngrok文件

tar -C /usr/local/ -zxvf ./ngrok.tar.gz

4.详细配置

1)创建证书

使用域名和IP地址两种方式创建证书时配置有部分不同

①使用域名时

#进入ngrok目录
cd /usr/local/ngrok
#使用openssl创建证书
openssl genrsa -out rootCA.key 2048
openssl req -x509 -new -nodes -key rootCA.key -subj "/CN=ngrok.site" -days 5000 -out rootCA.pem
openssl genrsa -out device.key 2048
openssl req -new -key device.key -subj "/CN=ngrok.site" -out device.csr
openssl x509 -req -in device.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out device.crt -days 5000

②使用公网IP地址时

#进入ngrok目录
cd /usr/local/ngrok#证书(使用IP地址时必须要配置这一行):
echo subjectAltName = IP:36.134.235.178 > extfile.cnfopenssl genrsa -out rootCA.key 2048
openssl req -x509 -new -nodes -key rootCA.key -subj "/CN=xx.xx.xx.168" -days 5000 -out rootCA.pem
openssl genrsa -out device.key 2048
openssl req -new -key device.key -subj "/CN=xx.xx.xx.168" -out device.csr
openssl x509 -req -in device.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out device.crt -days 5000 -extfile extfile.cnf

2)复制并覆盖到 assets 构建的时候自动引用

yes|cp rootCA.pem assets/client/tls/ngrokroot.crt
yes|cp device.crt assets/server/tls/snakeoil.crt
yes|cp device.key assets/server/tls/snakeoil.key

3) 生成服务端与客户端
根据自己服务器与客户端的操作系统选择命令。

<!--linux服务端/客户端-->
GOOS=linux GOARCH=386 make release-server (32位)
GOOS=linux GOARCH=amd64 make release-server(64位)GOOS=linux GOARCH=386 make release-client (32位)
GOOS=linux GOARCH=amd64 make release-client(64位)<!--Mac OS服务端/客户端-->
GOOS=darwin GOARCH=386 make release-server
GOOS=darwin GOARCH=amd64 make release-serverGOOS=darwin GOARCH=386 make release-client
GOOS=darwin GOARCH=amd64 make release-client<!--windows服务端/客户端-->
GOOS=windows GOARCH=386 make release-server
GOOS=windows GOARCH=amd64 make release-serverGOOS=windows GOARCH=386 make release-client
GOOS=windows GOARCH=amd64 make release-client

4)启动服务端

#进入到bin目录
cd /usr/local/ngrok/bin
#启动(如果是域名,则把domain中的IP换成域名)
./ngrokd -domain="xx.xx.xx.168" -httpAddr=":80" -httpsAddr=":443" -tunnelAddr=":4443"

如果需要后台启动

#后台启动命令
nohup ./ngrokd -domain="xx.xx.xx.168" -httpAddr=":80" -httpsAddr=":443" -tunnelAddr=":4443" & >/dev/null 2>&1 &

端口可以自行设置
①httpAddr是 http的端口,默认80,
②httpsAddr是 https的端口,默认443,
③tunnelAddr是 客户端连接ngrok的端口,默认设置4443

5)启动客户端

以windows为例:
把/bin/windows_amd64/ngrok.exe文件传输到本地。
然后在当前目录下新建文件ngrok.cfg,注意与ngrok.exe在相同目录下。

server_addr: "xx.xx.xx.xx:4443"
trust_host_root_certs: false

此处xx.xx.xx.xx需要写服务端所在的IP或者域名,4443为之前设置的tunnelAddr端口

新建脚本start.bat

①直接启动(IP方式或者直接使用服务端配置的域名)

ngrok -config=ngrok.cfg -log=ngrok.log  8080
设置proto则指定某种方式穿透
ngrok -proto=https -config=ngrok.cfg -log=ngrok.log  8080

8080就是本地需要穿透的端口
norok.log 就是日志的日志的名称

②使用子域名方式启动

ngrok -config=ngrok.cfg -log=ngrok.log -subdomain=xxx 8080

-log不是必须的,可以删除-log

双击start.bat即可。

如果是以IP地址来穿透,会出现穿透后地址为 xxxxxx.36.134.235.178:80 这种情况,此时无法成功访问,解决办法看最后的问题与解决方案

5.问题与解决方案

1.使用IP地址穿透时,穿透成功的链接地址为xxxxxx.36.134.235.178这种时。

去掉随机生成的 subdomain

ngrok 客户端会自动生成一个随机子域名或者用户自定义一个,总之无论如何都会有一个域名,这就会导致 ip 域名无效, 例如http://41254wg5.36.134.235.178 -> localhost:80, 解决办法就是改源码,去掉随机生成的 subdomain。代码地址:src/ngrok/server/tunnel.go 第89 行

// src/ngrok/server/tunnel.go  #89 行
// Register for random URLt.url, err = tunnelRegistry.RegisterRepeat(func() string {return fmt.Sprintf("%s://%x.%s", protocol, rand.Int31(), vhost)}, t)

修改后:

return fmt.Sprintf("%s://%s", protocol, vhost)

注意: 删掉 %x. ,rand.Int31(), 以及该文件第一行引入的 math/rand,重新编译出服务端与客户端即可。这样不加 -subdomain 选项就不会有子域名。

重新生成服务端与客户端,再启动

2.生成服务端与客户端时发生错误

go get ngrok/…: malformed module path “ngrok”: missing dot in first path element
make: *** [Makefile:8: deps] Error 1

进入环境配置文件,新增配置

vi /etc/profile
export GO111MODULE=off

重新载入配置文件source /etc/profile

Linux搭建Ngrok服务器详细过程相关推荐

  1. Linux下服务器搭建(2)——linux搭建svn服务器详细过程 及 使用TortoiseSVN客户端连接服务器

    环境: Linux环境为Centos7.2x64位:Centos6+版本搭建过,通用 首先安装svn,svn是subversion的缩写. 检查是否安装过: rpm -qa | grep subver ...

  2. Windows搭建ngrok服务器、Linux搭建ngrok服务器、支持用户管理

    微信公众号.支付宝支付等开发要求有公网(外网)服务器.每次调试时,上传代码到服务器很不方便.ngrok很好的解决了这一问题.网上的文章大多是讲怎么在Linux下搭建ngrok服务器.其实依靠云计算的强 ...

  3. Linux搭建SVN服务器详细教程

    前言 本文讲解Linux系统下如何搭建SVN服务器,详细说明各配置项的功能,最终实现可管控多个项目的复杂配置. SVN是subversion的缩写,是一个开放源代码的版本控制系统,通过采用分支管理系统 ...

  4. 链接不到服务器_新手搭建云服务器详细过程

    最近突然想使用下服务器,为后续工作准备,作为之前Linux都没有玩过的我感觉很费劲,所以就是无数次的百度,最终将服务器搭建好了:期间整理了一些资料,和过程上也做了些笔记,这里和大家分享下,希望对和我一 ...

  5. 新手搭建云服务器详细过程

    最近突然想使用下服务器,为后续工作准备,作为之前Linux都没有玩过的我感觉很费劲,所以就是无数次的百度,最终将服务器搭建好了:期间整理了一些资料,和过程上也做了些笔记,这里和大家分享下,希望对和我一 ...

  6. 易乐游装在云服务器_新手搭建云服务器详细过程

    最近突然想使用下服务器,为后续工作准备,作为之前Linux都没有玩过的我感觉很费劲,所以就是无数次的百度,最终将服务器搭建好了:期间整理了一些资料,和过程上也做了些笔记,这里和大家分享下,希望对和我一 ...

  7. RHEL 5搭建Samba服务器详细过程

    RHEL 5下Samba的搭建相对于其他系统来说是比较轻松的,下面就对RHEL 5下Samba的搭建过程做一简单的描叙,并且与其它系统的Samba服务器的搭建进行一下简单的比较. 在RHEL 5操作系 ...

  8. Linux服务器ldap启动,linux搭建ldap服务器详细步骤

    ldap这种原始的服务器搭建起来比较复杂,同时它也是CE必考的(客户端的搭建). 1.安装openldap-servers软件包 2.查看ldap模板文件的存放位置: 3.拷贝ldap模板文件到配置文 ...

  9. 搭建SVN服务器详细过程 及 使用方法 Windows端

    第一:下载 服务器安装程序下载地址: https://www.visualsvn.com/server/download/ SVN是一个版本管理系统,注意它是有中心化的.分为SVN客户端.SVN服务器 ...

最新文章

  1. 将图片(路径)转换为Base64 和 将base64转换为file类型
  2. dns服务器在电脑上有什么作用,DNS服务器是什么 DNS服务器的作用有哪些【详解】...
  3. Java java.lang.SecurityException: Prohibited package name
  4. matlab圆形器件,计算围绕点+ Matlab的圆形箱
  5. 贝叶斯算法伪代码_字节跳动算法面经
  6. 玩转大数据系列之一:数据采集与同步
  7. 为什么自建深度学习机器?因为比AWS便宜10倍啊!
  8. 字节跳动斥巨资开发出《Python知识手册》
  9. windows 全系列电脑加速,告别电脑“卡”的时代
  10. 脉冲经过高通和低通滤波器后的波形
  11. 阿里云直播生成推流和播流地址类
  12. 备份 二进制备份MySQLdump 增量备份 xtrabackupex
  13. Outlook账号被封?别慌,一步步教你怎么申诉
  14. bootstrap-列表样式
  15. 做你热爱的事情,35岁绝对不是问题
  16. python做用友财务报表_用友财务软件怎样生成财务报表?
  17. 网络传输介质 通信中的有线介质:双绞线、同轴电缆、光纤 引导性传输介质
  18. vue项目接入腾讯im
  19. 简述适配器的概念、作用以及主机适配器的概念
  20. 个人博客【页面插件集成】---学习09

热门文章

  1. java安卓自动关机_android自动关机代码
  2. JS 高级(二)闭包、封装
  3. KR通过Server酱通知
  4. TFTP协议详细分析
  5. 跟我学c++高级篇——模板元编程之十一鸭子类型
  6. css textarea行数_超级简单:在一个TextArea中如何限制行数和字符数
  7. Git入门之日志和版本回退
  8. ibatis 使用入门
  9. 小程序的生命周期和页面的生命周期
  10. 盘点常见的7种网络安全威胁