由于开发微信公众号项目,经常需要将本地部署的接口让外网能直接调用到,偶然发现还有个叫ngrok的神器专门做了这件事,不但提供了一个在外网能够安全的访问内网Web主机,还能捕获所有请求的http内容,方便调试,甚至还支持tcp层端口映射。支持Mac OS X,Linux,Windows平台。
1. ngrok下载运行
体积很小,官网下载后直接解压得到一个二进制文件,在shell中执行./ngrok 80即可,默认会分配随机的二级域名来访问,转发到本机的80端口。可以通过-help参数来查看详细的说明,运行后如下提示:
Tunnel Status online Version 1.6/1.5 Forwarding http://steven-mbp.ngrok.com -> 127.0.0.1:8080 Forwarding https://steven-mbp.ngrok.com -> 127.0.0.1:8080 Web Interface 127.0.0.1:4040 # Conn 16 Avg Conn Time 558ms
我这里是使用了自定义二级域名,意味着访问http://steven-mbp.ngrok.com就如同访问内网的http://127.0.0.1:8080,很方便吧。通过ngrok提供的管理界面(127.0.0.1:4040)可以清楚的看到当前有哪些连接,以及请求的url,可以进行replay。
2. ngrok常用示例
1. 采用自定义二级域名steven-mbp.ngrok.com转发到本机的8080端口。
./ngrok -subdomain steven-mbp 8080
2. tcp端口转发,当然外网端口是随机分配的。
./ngrok -proto=tcp 22
3. 转发到局域网其他的机器
./ngrok 192.168.0.1:80
4. 绑定顶级域名(付费才可用),在dashboard中添加域名,将域名cname解析到ngrok.com即可。
./ngrok -hostname test.dorole.com 8080
3. ngrok配置文件
ngrok可以将参数写到文件中,默认是放在~/.ngrok。例如:
tunnels: client: auth: "user:password" proto: https: 8080 ssh: proto: tcp: 22 test.dorole.com proto: http: 9090
这里定义了三个隧道,client表示转发http到本机8080,同时要求验证,ssh表示支持远程访问,第三个是绑定了域名转发到9090。这时候只需要一个./ngrok start client ssh test.dorole.com即可快速启动这三个隧道服务。
每一个隧道的配置节点都有五个参数,proto,subdomain,auth,hostname和remote_port,每个隧道必须有proto参数来指定本地地址和端口。auth参数用于在http(s)中身份认证,而remote_port用于在tcp隧道中指定远程服务器端口。如果没有配置subdomain参数,ngrok会默认一个二级域名与隧道节点一样的名字。
4. 配置文件中的其他参数
authtoken: abc123 inspect_addr: "0.0.0.0:8888" tunnels: ...
authtoken用于设置登录ngrok的授权码,可以在ngrok首页的dashboard中查看到。inspect_addr用于设置监听ip,比如设置为0.0.0.0:8080意味着监听本机所有ip的8080端口上。ngrok也支持自己架设ngrokd服务器,在配置中通过server_addr: “dorole.com:8081″来指定自己搭建的服务器地址。设置trust_host_root_certs: true来支持TLS加密协议的证书信任。
介于ngrok的局限性和高度依赖,我用Java重新写了一个转发项目:御花园(https://ifport.com/),欢迎注册使用,目前免费提供,后续资源不足会考虑收费方案。
本文链接地址:https://dorole.com/1233/
ngrok的确很厉害,之前翻译了,ngrok,中文文档都在ngrok.cn上,希望有帮助
1. 默认生成的那个随机域名外网是访问不了的吧?
2.这个要使用自定义的二级域名是需要花钱的吧?
可以外网访问
哇哦,他们让我用这个做微信
不错,讲解很细致!
国内有一个参考ngrok开发的叫pc5s,我用过了,速度很快.
https://pc5s.com
国内大陆服务器, natapp.cn 而且还有稳定的收费方案
问下我是移动的光纤,获取的是内网IP,能用ngrok在路由器上运行后实现内网穿透吗?
ngrok不支持路由器运行,现在不确定能不能。pc应该是没问题的。
以支持路由运行:http://www.right.com.cn/forum/thread-161324-1-2.html
ngrok 怎么安装到路由器上啊?华硕的梅林。
不能把
https://github.com/inconshreveable/ngrok
编译ARM版本,可以正常在梅林上运行,有一点,不知道怎么后台运行?
nohup xxx & 试试
或者写到启动脚本里
xtunnel开源内网穿透,图形界面,功能更强大
https://github.com/d1sm/xtunnel
国内最新服务器:www.ngrok.cc站长还给了视频教程,很给力
这个被墙了怎么破..有类似的替代品吗
貌似oray有个类似的服务,收费的。
还有一个nat123 http://www.nat123.com
请教下,我下载了一个tar包,在mac下运行,出现了cannot execute binary file 这是怎么回事呢?
电脑上还没安装JDK,没装tomcat这个有关系嘛
没有关系,解压了吗?
配置了ngrok之后只能在本机访问URL可以访问,在外网就不行,是在Mac环境下不支持吗?但是前几天还可以,今天就不 行了。。。
配置了ngrok之后只能在本机访问URL可以访问,在外网就不行,是在Mac环境下不支持吗?
得看网络环境,首先本机或者路由器要能获取到公网ip,路由器做好端口转发,其次端口没有被运营商屏蔽。
大牛,ngrok linux下不支持后台运行么, &加后台后就stoped 有没啥办法让它能后台运行
不支持后台,用screen
原文档中应该是说ngrok可以通过代理工作, 不是说可以配置成一个代理吧
是的,是支持代理,当时是想说反向代理来着,谢谢提醒。。
Server failed to allocate tunnel: Custom subdomains are only available after you signup at https://ngrok.com/signup
root@android:/ #
这这怎么办呀?
使用子域名,要先注册吧,获得key才能用。
ngrok 轉發 ssh 的時候每次都是隨機分配端口號,且一段時間後端口號有可能會改變,所以我爲此寫了一個 script, 可以時刻查看當前端口號:效果圖與 script 源碼
你错了。ssh是可以指定端口的。用remote_port参数,比如remote_port:822。
把它保存在配置文件里,再次运行即可。
开发web项目!
咱俩成同行了0 0
那啥= = 既然是开发web项目的为毛不重新设计下这个博客
这默认主题蛮好看