NodeJS的正向代理、反向代理、透明代理详解
引 言:nginx作为时下最流行的http服务器之一,同时它是一个反向代理服务器,提到反向代理服务器,有同学可能觉得这个概念很模糊,如果说到代理,他可能明白,但是再引出一个正向代理,估计懵了…
代理服务技术是一门很古老的技术,是在互联网早期出现就使用的技术。一般实现代理技术的方式就是在服务器上安装代理服务软件,让其成为一个代理服务器,从而实现代理技术。常用的代理技术分为正向代理、反向代理和透明代理。
一、正向代理(forward proxy)
一般情况下,如果没有特别说明,代理技术默认说的是正向代理技术。它隐藏了真实的请求客户端,服务端不知道真实的客户端是谁,客户端请求的服务都被代理服务器代替来请求,知名的*工具* 扮演的就是典型的正向代理角色。
使用正向代理服务器作用主要有以下几点:
1)访问本无法访问的服务器b
他的工作原理就像一个跳板。举个例子,我是一个用户,我访问不了某网站,但是我能访问一个代理服务器,这个代理服务器能访问那个我不能访问的网站,于是我先连上代理服务器,告诉他我需要那个无法访问网站的内容,代理服务器去取回来,然后返回给我。
现实中的例子就是“*”。不过自从vpn技术被广泛应用外,“*”不但使用了传统的正向代理技术,有的还使用了vpn技术。
2)加速访问服务器b
早期的正向代理中,很多人使用正向代理就是提速。
3)cache作用
cache(缓存)技术和代理服务技术是紧密联系的(不光是正向代理,反向代理也使用了cache(缓存)技术。
4)客户端访问授权
5)隐藏访问者的行踪
二、反向代理(reverse proxy)
在计算机世界里,由于单个服务器的处理客户端(用户)请求能力有一个极限,当用户的接入请求蜂拥而入时,会造成服务器忙不过来的局面,可以使用多个服务器来共同分担成千上万的用户请求,这些服务器提供相同的服务,对于用户来说,根本感觉不到任何差别。
反向代理隐藏了真实的服务端,当我们请求 www.baidu.com 的时候,就像拨打10086一样,背后可能有成千上万台服务器为我们服务,但具体是哪一台,你不知道,也不需要知道,你只需要知道反向代理服务器是谁就好了,www.baidu.com 就是我们的反向代理服务器,反向代理服务器会帮我们把请求转发到真实的服务器那里去。
你以为你是这样访问百度的:
其实你是这样访问百度的:
nginx就是性能非常好的反向代理服务器,用来做负载均衡。(开放的反向代理应用:nginx和nat123。nginx是单纯的反向代理,需要自行搭建反向代理服务才能使用,效率高。nat123是结合了nat和反向代理的应用,可以直接使用,解决80端口问题等,速度快。)
反向代理的实现:
用户和负载均衡设备直接通信,也意味着用户做服务器域名解析时,解析得到的ip其实是负载均衡的ip,而不是服务器的ip,这样有一个好处是,当新加入/移走服务器时,仅仅需要修改负载均衡的服务器列表,而不会影响现有的服务。
使用反向代理服务器作用主要有以下几点:
1)保护和隐藏原始资源服务器
2)负载均衡
三、透明代理
如果把正向代理、反向代理和透明代理按照人类血缘关系来划分的话。那么正向代理和透明代理是很明显堂亲关系,而正向代理和反向代理就是表亲关系了 。透明代理的意思是客户端根本不需要知道有代理服务器的存在。
下面一些对比说明便于更好的理解:
正向代理是客户端配置,反向代理是服务器端配置。
正向代理可以访问 google,反向代理只能访问特定网址。
正向代理中,proxy和client同属一个lan,对server透明;
反向代理中,proxy和server同属一个lan,对client透明。
正向代理,代理相当于一个透明的中间件 a,你访问任何网站 abcde 都走这个中间件 a,但在你看来,你访问的永远都是 abcde,而不是 a。
反向代理,固定 a 为 a 的反向代理,唯一,访问 a 相当于访问 a,访问不到 bcde,同时在你看来,你访问的不是 a 而是 a,你甚至不知道 a 的存在。
正向代理– 我代理帮我干活。(你发出去的 http 请求是完整的 url,由代理生成 http 请求头)
反向代理– 我不知道帮我干活的是代理。(服务器自己的负载均衡服务器调度,你不用管)
透明代理– 我不知道他帮我干了活(著名的劫持, 重组 http 请求)