localtunnel 原理及与 nginx 的区别对比分析

来源:互联网 发布:sql去重复查询余一条 编辑:程序博客网 时间:2024/05/18 01:26

localtunnel 

将自己暴露给世界。Localtunnel允许您轻松地在本地开发机器上共享Web服务,而不需要修改DNS和防火墙设置。Localtunnel将为您指定一个唯一的可公开访问的URL,该URL将代理对本地运行的Web服务器的所有请求。

nginx

Nginx ("engine x") 是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器。Nginx是由Igor Sysoev为俄罗斯访问量第二的Rambler.ru站点开发的,第一个公开版本0.1.0发布于2004年10月4日。其将源代码以类BSD许可证的形式发布,因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。2011年6月1日,nginx 1.0.4发布。
Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行。由俄罗斯的程序设计师Igor Sysoev所开发,供俄国大型的入口网站及搜索引擎Rambler(俄文:Рамблер)使用。其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。

localtunnel 和nginx有区别呢?

localtunnel 的功能类似于“花生壳,pagekite”,是解决你想发布网站到公网上,却没有公网IP的问题。

而Nginx解决是Web的发布或服务的代理的问题。

如果你本地使用Nginx,当然可以是其它(IIS、WebLogic、……)服务器,想让别人访问,而你又没有一个固定可用的公网IP,那就可以使用localtunnel 解决这一问题。

localtunnel 原理及流程

本节内容摘自:http://blog.csdn.net/jt6562/article/details/41986447

总体来说localtunnel.me的原理还是很简单的,首先必须有一台能在公网访问的服务器作数据中转用,localtunnel.me的服务器端程序就部署在这上边。服务器程序一边监听浏览器的http请求,一边监听客户端的tcp请求。服务器将HTTP请求转发到对应的客户端。客户端程序又将HTTP报文转发到本地对应WEB服务器端口。这样,就实现了内网web服务器的公网映射。
我们主要看看localtunnel.me的工作流程:
1.监听80端口,当然也可以是其他端口,等待客户端或浏览器的http请求。
2.服务器在接收到一个HTTP请求时,会判断当前请求的域名是主域名还是子域名。这时会有两种处理流程,主域名提供了新的通道创建功能,子域名则用来转发HTTP请求
3.如果请求的URL是主域名,且URL为类似这样的请求:http://www.exampleserver.com/?new或http://www.exampleserver.com/xxxxxxxxxx。服务端程序会创建一个TCP服务器,并把相关信息返回给对应的客户端。这些信息包括服务器新监听的TCP端口号,以及完整的子域名。
这里要说明一下,域名www.exampleserver.com必须是顶级域名(当然,也可以不是,只要做二次开发)。
new表示生成一个随机的子域名,或者指定子域名为xxxxxxxx.exampleserver.com。
4.客户端收到服务器返回的信息后,就会与服务器创建一条TCP连接,hostname是服务器的域名或IP,port是刚才服务器返回的信息中的port。这样,客户端和服务器就建立起一条长连接。当客户端与服务器的TCP链接建立成功后,会马上建立与本地WEB服务器的TCP链接。注意是TCP链接,不是HTTP链接。
5.当地球上的某个浏览器通过子域名的方式访问http://xxxxxxxx.exampleserver.com时,服务器端程序会在一张大表里找xxxxxxxx这个子域名名字对应的客户端socket连接,并将http请求转发过去。localtunnel.me使用bouncy库来实现转发功能。

ok,到这里,服务器端的大部分工作都完成来,现在HTTP的请求到了客户端。

6.客户端收到了http请求的数据后,就在远程服务器和本地WEB服务器之间建立一条pipe。不过,在首次转发之前,需要修改HTTP头的Host字段为本地服务器地址

内网穿透

本节内容选自:https://segmentfault.com/q/1010000000752723/a-1020000000755999

无需配置的“内网映射到外网”其实并不存在的。这个实现只是借助公网服务器协助,从而给连接内网服务器寻找到通讯路径的内网穿透内网穿透的应用中,通讯双方必然首先对一个公网服务器主动发起连接。这时双方就会在自己不能控制的公网IP上获得一个随机的端口号。而后公网服务器与双方通讯,互相告知端口号从而允许双方建立直接的连接。(若干细节不清,只能说从概念上大致如此,请原谅)。各种相关的软件都是如此,例如TeamViewer、Oray向日葵乃至QQ远程协助等。就说这个ngrok,其实也是需要通讯双方连接ngrok中心服务器,甚至中心服务器的某些高级功能还提供付费计划对吧。从这个意义上说,内网穿透更多的是一种服务而不是软件。服务商的稳定运行远比软件本身的意义要大。——自建这种服务多半要自己找公网服务器,并且要自建相关工具系统,很大程度上说是不划算的。

WebRTC

说到内网穿透,就想到了去年做的项目中使用到WebRTC,就用到了 Turn,Stun,ICE 之类的服务。

localtunnel 的功能和 Turn,Stun,ICE 还是有几分相似的。我们来看几张图来辅助理解。





对比着Turn,Stun,ICE,我再上一张localtunnel 的图,画的很烂,大概说明一下原理。

1、你的域名指向的是localtunnel 服务器的IP;

2、你需要在localtunnel 服务器上注册;

3、localtunnel 客户端应该与服务器保持心跳;

4、别人想访问你的Web,数据都需要经过 localtunnel 的服务器和你本地的客户端;

这么来看的话,localtunnel 服务器端的压力是很大的。

如果localtunnel 服务端能支持域名服务,再将一个二级域名指向你的客户端,将客户端访问重定向到二级域名的话,那将可以大大的降低服务端的压力。按理是这样的实现,但看上面的流程描述又不像。

======================文档信息========================

版权声明:非商用自由转载-保持署名-注明出处

署名(BY) :testcs_dn(微wx笑)

文章出处:[无知人生,记录点滴](http://blog.csdn.NET/testcs_dn)

==============欢迎关注我的个人微信订阅号(微wx笑)============


1 0
原创粉丝点击