欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

NodeJS的正向代理、反向代理、透明代理详解

程序员文章站 2022-07-01 15:23:56
引 言:nginx作为时下最流行的http服务器之一,同时它是一个反向代理服务器,提到反向代理服务器,有同学可能觉得这个概念很模糊,如果说到代理,他可能明白,但是再引出一个正向代理...

引 言:nginx作为时下最流行的http服务器之一,同时它是一个反向代理服务器,提到反向代理服务器,有同学可能觉得这个概念很模糊,如果说到代理,他可能明白,但是再引出一个正向代理,估计懵了…

代理服务技术是一门很古老的技术,是在互联网早期出现就使用的技术。一般实现代理技术的方式就是在服务器上安装代理服务软件,让其成为一个代理服务器,从而实现代理技术。常用的代理技术分为正向代理、反向代理和透明代理。

一、正向代理(forward proxy)

一般情况下,如果没有特别说明,代理技术默认说的是正向代理技术。它隐藏了真实的请求客户端,服务端不知道真实的客户端是谁,客户端请求的服务都被代理服务器代替来请求,知名的*工具* 扮演的就是典型的正向代理角色。

NodeJS的正向代理、反向代理、透明代理详解

使用正向代理服务器作用主要有以下几点:

1)访问本无法访问的服务器b

他的工作原理就像一个跳板。举个例子,我是一个用户,我访问不了某网站,但是我能访问一个代理服务器,这个代理服务器能访问那个我不能访问的网站,于是我先连上代理服务器,告诉他我需要那个无法访问网站的内容,代理服务器去取回来,然后返回给我。

现实中的例子就是“*”。不过自从vpn技术被广泛应用外,“*”不但使用了传统的正向代理技术,有的还使用了vpn技术。

2)加速访问服务器b

早期的正向代理中,很多人使用正向代理就是提速。

3)cache作用

cache(缓存)技术和代理服务技术是紧密联系的(不光是正向代理,反向代理也使用了cache(缓存)技术。

4)客户端访问授权

5)隐藏访问者的行踪

二、反向代理(reverse proxy)

在计算机世界里,由于单个服务器的处理客户端(用户)请求能力有一个极限,当用户的接入请求蜂拥而入时,会造成服务器忙不过来的局面,可以使用多个服务器来共同分担成千上万的用户请求,这些服务器提供相同的服务,对于用户来说,根本感觉不到任何差别。

反向代理隐藏了真实的服务端,当我们请求 www.baidu.com 的时候,就像拨打10086一样,背后可能有成千上万台服务器为我们服务,但具体是哪一台,你不知道,也不需要知道,你只需要知道反向代理服务器是谁就好了,www.baidu.com 就是我们的反向代理服务器,反向代理服务器会帮我们把请求转发到真实的服务器那里去。

你以为你是这样访问百度的:

NodeJS的正向代理、反向代理、透明代理详解

其实你是这样访问百度的:

NodeJS的正向代理、反向代理、透明代理详解

nginx就是性能非常好的反向代理服务器,用来做负载均衡。(开放的反向代理应用:nginx和nat123。nginx是单纯的反向代理,需要自行搭建反向代理服务才能使用,效率高。nat123是结合了nat和反向代理的应用,可以直接使用,解决80端口问题等,速度快。)

反向代理的实现:

用户和负载均衡设备直接通信,也意味着用户做服务器域名解析时,解析得到的ip其实是负载均衡的ip,而不是服务器的ip,这样有一个好处是,当新加入/移走服务器时,仅仅需要修改负载均衡的服务器列表,而不会影响现有的服务。

使用反向代理服务器作用主要有以下几点:

1)保护和隐藏原始资源服务器

NodeJS的正向代理、反向代理、透明代理详解

2)负载均衡

NodeJS的正向代理、反向代理、透明代理详解

三、透明代理

如果把正向代理、反向代理和透明代理按照人类血缘关系来划分的话。那么正向代理和透明代理是很明显堂亲关系,而正向代理和反向代理就是表亲关系了 。透明代理的意思是客户端根本不需要知道有代理服务器的存在。

下面一些对比说明便于更好的理解:

正向代理是客户端配置,反向代理是服务器端配置。

正向代理可以访问 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 请求)