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笑)============