简单搭建ngrok服务器,实现内网穿透

为啥搭建ngrok服务器

在做Web开发时,我们需要将一个本地的Web网站暴露给外网访问(比如我在做本地开发微信时)。

ngrok 是一个反向代理工具,我们可以直接下载官网的客户端使用,但是因为官网服务器在国外,比较慢,而且免费版不支持绑定二级域名。

需要准备什么

  • 公网的linux服务器(最好是centos7,一步通过)
  • 独立域名

如果对docker熟悉的话可以直接运行我制作的ngrok服务器的镜像来启动https://github.com/jueying/docker-ngrok-server

步骤

1. 安装git, golang和openssl
yum install -y git golang openssl

git版本和golang版本不能太旧,centos7默认安装git1.8.3,go1.8.3

2. clone ngrok项目到本地
git clone https://github.com/inconshreveable/ngrok.git /usr/local/ngrok
3. 生成证书
# 这里替换为自己的独立域名
export NGROK_DOMAIN="huahongbin.cn"#进入到ngrok目录生成证书
cd /usr/local/ngrok# 下面的命令用于生成证书
openssl genrsa -out rootCA.key 2048openssl req -x509 -new -nodes -key rootCA.key -subj "/CN=$NGROK_DOMAIN" -days 5000 -out rootCA.pem
openssl genrsa -out device.key 2048openssl 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
# 将我们生成的证书替换ngrok默认的证书
cp rootCA.pem assets/client/tls/ngrokroot.crt
cp device.crt assets/server/tls/snakeoil.crt
cp device.key assets/server/tls/snakeoil.key
4. 编译不同平台的服务端和客户端
# 编译64位linux平台服务端
GOOS=linux GOARCH=amd64 make release-server
# 编译64位windows客户端
GOOS=windows GOARCH=amd64 make release-server
# 如果是mac系统,GOOS=darwin。如果是32位,GOARCH=386

执行后会在ngrok/bin目录及其子目录下看到服务端ngrokd和客户端ngrok.exe

5. 启动服务端
# 指定我们刚才设置的域名,指定http, https, tcp端口号,端口号不要跟其他程序冲突
./bin/ngrokd -domain="$NGROK_DOMAIN" -httpAddr=":80" -httpsAddr=":8082" -tunnelAddr=":443"
6. 启动客户端

将ngrok.exe拷贝到本地文件夹中(可以用winscp),并在文件夹新建配置文件ngrok.cfg,内容如下:

server_addr: "huahongbin.cn:443"trust_host_root_certs: false

域名替换为自己的独立域名,端口替换为启动ngrok服务器设置的tunnel端口。

然后在cmd中使用以下命令启动:

ngrok.exe -subdomain=jueying -config=ngrok.cfg 80

80即为你要代理的本地端口

在浏览器中输http://127.0.0.1:4040 可以看到具体的请求信息。

常见问题

  • 编译时在下面步骤卡主 go get gopkg.in/yaml.v1 这是因为Git版本太低,请将服务器git版本升级到1.7.9.5以上。
  • 因为ngrok首次编译时需要在国外网站下载一些依赖。可能会很慢甚至timeout。多尝试几次,或者你懂得。

作者:绝影jy 链接:https://my.oschina.net/imjueying/blog/1786737

原文发布于微信公众号 - java思维导图(java-mindmap)

原文发表时间:2018-04-02

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏difcareer的技术笔记

如何快速定位native方法在对应so中的位置前言原理

在逆向的时候,有些应用有一大堆的so,而且都是提前加载好,有的so甚至做了处理,很难看出函数名。本文讲述的方法可以快速定位:

12020
来自专栏SpiritLing

[原创] 利用前端+php批量生成html文件,传入新文本,输出新的html文件

本人因为要想自己写个小说网站练练手,在其中遇到的一些问题,将其解决方法总结出来,例如: 1:小说网站存储了大量的小说,每个小说主页都很相似,url不同,不是使用...

49160
来自专栏c#开发者

BizTalk database lookup funcatoid DbConnectionString 设定问题有解了

前些日子有位提出了关于database lookup funcatoid设定数据连接字符串的问题。 默认情况 ? 第一个参数条件的值 value 第二个参...

36160
来自专栏木头编程 - moTzxx

自测:rsync 指定不需同步的目录操作

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u011415782/article/de...

11020
来自专栏蓝天

Zookeeper C++编程实战之配置更新

CZookeeperHelper: https://github.com/eyjian/libmooon/blob/master/include...

11930
来自专栏武军超python专栏

2018年7月23日python系统模块os和文件io

今天遇到的新单词: attrubute:    n属性 cwd全称:     Current Working Directory当前工作目录 argume...

15550
来自专栏用户画像

Windows系统 配置Java开发环境 JDK与JRE

       通过oracle官网---->下载---->Java---->Java SE找JDK8

13040
来自专栏bboysoul

让cat命令有颜色得输出文件(ccat)

今天讲一个命令,叫ccat,它和cat的区别就是当我cat一个文件的时候ccat可以根据文件的格式来高亮输出。就和这篇文章上面的图片一样

11830
来自专栏Web项目聚集地

Linux知识点总结

23030
来自专栏晓晨的专栏

ASP.NET Core 发布之后通过命令控制监听地址和环境变量

24950

扫码关注云+社区

领取腾讯云代金券