负载均衡 反向代理为何叫反向代理?

来源:互联网 发布:移动宽带网络维修电话 编辑:程序博客网 时间:2024/06/09 17:10

转  https://www.zhihu.com/question/24723688

与正向代理比起来,反向代理是什么东西反向了?
关注者
1217
被浏览
184352

41 个回答

正向代理


A同学在大众创业、万众创新的大时代背景下开启他的创业之路,目前他遇到的最大的一个问题就是启动资金,于是他决定去找马云爸爸借钱,可想而知,最后碰一鼻子灰回来了,情急之下,他想到一个办法,找关系开后门,经过一番消息打探,原来A同学的大学老师王老师是马云的同学,于是A同学找到王老师,托王老师帮忙去马云那借500万过来,当然最后事成了。不过马云并不知道这钱是A同学借的,马云是借给王老师的,最后由王老师转交给A同学。这里的王老师在这个过程中扮演了一个非常关键的角色,就是代理,也可以说是正向代理,王老师代替A同学办这件事,这个过程中,真正借钱的人是谁,马云是不知道的,这点非常关键。


我们常说的代理也就是只正向代理,正向代理的过程,它隐藏了真实的请求客户端,服务端不知道真实的客户端是谁,客户端请求的服务都被代理服务器代替来请求,某些科学上网工具扮演的就是典型的正向代理角色。用浏览器访问http://www.google.com 时,被残忍的block,于是你可以在国外搭建一台代理服务器,让代理帮我去请求google.com,代理把请求返回的相应结构再返回给我。



反向代理


大家都有过这样的经历,拨打10086客服电话,可能一个地区的10086客服有几个或者几十个,你永远都不需要关心在电话那头的是哪一个,叫什么,男的,还是女的,漂亮的还是帅气的,你都不关心,你关心的是你的问题能不能得到专业的解答,你只需要拨通了10086的总机号码,电话那头总会有人会回答你,只是有时慢有时快而已。那么这里的10086总机号码就是我们说的反向代理。客户不知道真正提供服务人的是谁。


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


两者的区别在于代理的对象不一样:正向代理代理的对象是客户端,反向代理代理的对象是服务端

不妨也关注一下公众号 Python之禅

编辑于 2017-06-21

很久以前,老王去饭店吃饭,需要先到饭店,七荤八素点好菜,坐等饭菜上桌,然后大快朵颐,不亦乐乎。

有了第三方订餐外卖平台(代理),老王懒得动身前往饭店,老王打个电话或用APP,先选好某个饭店,再点好菜,外卖小哥会送上门来。

由于某个品牌的饭店口碑特别好,食客络绎不绝涌入,第三方订餐电话也不绝于耳,但是限于饭店接待能力有限,无法提供及时服务,很多食客等得不耐烦了,纷纷铩羽而归,饭店老总看着煮熟的鸭子飞走了,心疼不已。

痛定思痛,老总又成立了几个连锁饭店,形成一个集群,对外提供统一标准的菜品服务,电话订餐电话400-xxx-7777,当食客涌入饭店总台,总台将食客用大巴运到各个连锁店,这样食客既不需要排队,各连锁店都能高速运转起来,一举两得,老总乐开了花,并为此种运作模式起名为“反向代理”(Reverse Proxy)。

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



反向代理的实现
1)需要有一个负载均衡设备来分发用户请求,将用户请求分发到空闲的服务器上

2)服务器返回自己的服务到负载均衡设备

3)负载均衡将服务器的服务返回用户

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

谈完反向代理服务,再来谈谈终端用户常用的代理服务。

代理
1)用户希望代理服务器帮助自己,和要访问服务器通信,为了实现此目标,需要以下工作:

a) 用户IP报文的目的IP = 代理服务器IP
b) 用户报文端口号 = 代理服务器监听端口号
c) HTTP 消息里的URL要提供服务器的链接

2)代理服务器可以根据c)里的链接与服务器直接通信

3)服务器返回网页

4)代理服务器打包3)中的网页,返回用户。

代理服务器应用场景
场景一

如果不采用代理,用户的IP、端口号直接暴露在Internet(尽管地址转换NAT),外部主机依然可以根据IP、端口号来开采主机安全漏洞,所以在企业网,一般都是采用代理服务器访问互联网。

那有同学会有疑问,那代理服务器就没有安全漏洞吗?
相比千千万万的用户主机,代理服务器数量有限,修补安全漏洞更方便快捷。

场景二
在一个超大型局域网,德高望重的家长觉得小盆友们“幼稚”、“有时还有点单纯”,外部的世界是洪水猛兽,为了不让小盆友们学坏,决定不让小盆友们访问一些网站,可小盆友们有强烈的逆反心理,侬越是不让我看,我越是想看,于是小盆友们使用了代理服务器,这些代理服务器将禁止访问的网页打包好,然后再转交给小盆友,仅此而已。

当然关键的关键是代理服务器不在禁止名单当中!
编辑于 2017-04-26
代理其实就是一个中介,A和B本来可以直连,中间插入一个C,C就是中介。刚开始的时候,代理多数是帮助内网client访问外网server用的(比如HTTP代理),从内到外。后来出现了反向代理,"反向"这个词在这儿的意思其实是指方向相反,即代理将来自外网client的请求forward到内网server,从外到内
编辑于 2014-08-06
上面的答案都说的很好,我画了张图能更直观地解释为何反向代理叫“反向“代理

正向代理中,proxy和client同属一个LAN,对server透明;
反向代理中,proxy和server同属一个LAN,对client透明。
实际上proxy在两种代理中做的事都是代为收发请求和响应,不过从结构上来看正好左右互换了下,所以把后出现的那种代理方式叫成了反向代理。

欢迎指正,以上。
编辑于 2015-05-20
正向代理代理客户端,反向代理代理服务器
发布于 2015-06-17

所谓反向代理基本上就是一个服务端的负载均衡器。很好奇java界总喜欢弄一些新名词。。莫名其妙。语言是用来交流的,不是用来装逼的。有兴趣的可以追根溯源一下这个名词的出处。我理解就是写apache文档那个人造出来的。然后一帮人不理解这个反人类的名词。然后理解了的自以为得意经常面试考,看到这个名词的人以为逼格很高然后不知怎么的这个名词就”流行“起来。我对这个名词的想法是跟UML一样,属于反人类的范畴,如果你不理解,完全可以。碰到别人说到这个名词,你不理解就问他是什么就行了。

=====================更正=======================
据我最新考据,这个词语最早的出处应该是Sun公司2004年出的这本书
Securing Web Applications through a Secure Reverse Proxy
不清楚作者新造一个名词的想法是什么。目前也查不出是哪个家伙发明这个反人类名词的。
处于同一位置的负载均衡器的feature可完全包含所谓的反向代理。
Load balancing (computing)
编辑于 2016-06-15
为阿笠硕士的答案补图
发布于 2015-10-21
精辟,正向代理隐藏真实客户端,反向代理隐藏真实服务端,一下就懂了,很有帮助
发布于 2017-02-23
看完这么多人的,来说下我的想法,用访问百度来比喻一下。
如果想用正向代理的方式访问百度的话,那我们得这样做:
1、自己搭一个或者找一个代理服务器
2、将上一步得到的代理服务器,在系统中设置好,windows中是这样设置的

127.0.0.1是我的代理服务器的ip,8888是我的代理服务器的端口。
3、然后访问baidu.com,这样的话代理服务器就会开始工作了,首先你访问百度的请求会发送到代理服务器上,然后代理服务器就会听你的话,去baidu.com把东西给拿回来,然后放在自己的服务器上面,之后你就从代理服务器上拿走,返回给自己电脑。
这里的要点是:
客户端没有直接和服务端(baidu.com)接触,而是通过代理服务器(127.0.0.1:8888)间接访问,数据也是从代理服务器上直接拿的。

而使用反向代理访问baidu.com的话,我们本地根本就不用配置,因为啊,这个反向代理其实是服务器端的配置。而且其实我们一直都是用反向代理访问大多数网站的。
我们访问的baidu.com,然后从这个服务器拿到的资源,其实可能这些资源并不是从这个服务器里拿出来的,而是这个服务器作为反向代理,从别的服务器拿过来的。
你以为你是这样访问百度的
而实际上你是这么访问百度的
所以我们用反向代理,这个反向代理就相当于一个统筹资源的作用
发布于 2017-01-21
一个是代理(v)客户端,为客户端收发请求,使真实客户端对服务器不可见。
一个是代理(v)服务器,为服务器收发请求,使真实服务器对客户端不可见。
因为服务对象和自身角色不同,所以刚好是相反的。
(v代表动词)
编辑于 2015-04-15
区别就在于,正向代理是用户端部署/使用,目的为了隐藏客户端;反向代理是服务端部署/使用,目的为了隐藏服务端。
至于负载均衡,CDN都是反向代理的应用,但他们都不代表反向代理,所以反对一下某些高票答案,低票答案比高票靠谱多了。
编辑于 2017-04-25

服务的目标不同。

普通代理,forward proxy,是服务于特定用户(比如说一个公司内 / 一个局域网内的客户)以访问非特定的服务;
反向代理,reverse proxy,是服务于非特定用户(对于公开互联网服务而言,通常是所有用户)以访问特定的服务。
发布于 2014-08-06
我的理解:
代理:在客户这一端,替客户收发请求。
反向代理:在服务器机房这一端,替服务器收发请求,也就是说请求和响应都先经过反向代理。具有缓存、安全、负载均衡等作用。
编辑于 2014-08-06
看完大家的回答,无论如何感觉认识更清楚了。
正向代理:代理端代理的是客户端。
反向代理:代理端代理的是服务端。
发布于 2016-11-16

我们常说的代理是正向代理。使用正向代理的过程如下:

1,客户端连接代理。

2,代理连接服务器。

3,服务器将结果发给代理。

4,代理将结果发给客户端。

反向代理的过程如下:

1,客户端连接服务器,其实连接的是反向代理服务器,但是客户端不知道。

2,反向代理将请求转发给相应的服务器。

3,服务器将结果发给反向代理。

4,方向代理将结果发给客户端。

流程基本一样,主要是反向代理是和服务器部署在一起,如nginx,haproxy,但客户端不知道反向代理的存在。反向代理知道服务器集群的情况,知道怎么转发请求给具体的服务器。而正向代理只能转发给相应的域名对应的服务器。反向代理因为和服务器部署在一起,所以可以用来做负载均衡,对客户端请求进行各种处理(如统计连接数,拒绝连接等)等等。

主要记住,反向代理是和服务器集群在一起的,并且知道集群的内部情况。

编辑于 2017-04-25

正向代理即是客户端代理, 代理客户端, 服务端不知道实际发起请求的客户端.


反向代理即是服务端代理, 代理服务端, 客户端不知道实际提供服务的服务端.

发布于 2016-11-08

正向代理中proxy代理client来向一个server发起请求.
主要用途:
防火墙的作用, 让所有对一个服务器发起的请求中间加一个中间层, 方便做一些拦截, 屏蔽什么的.

而反向代理中proxy代理一个或者多个server接收clients的请求, server对于client来说是不可见的
用途:
1. 内容分发网络CDN, 通过反向代理把请求分发到世界各地的服务器去, 提升访问速度.
2. 大公司不想暴露自己主服务器的位置.


可以参考一个StackOverflow上很棒的答案:
webserver - Difference between proxy server and reverse proxy server
编辑于 2016-05-09
简单的说就是 : 请求分发到多台服务器
发布于 2016-03-30
多说一句,反向代理不只是负载均衡,还可以用来处理一些服务器和客户端不能直连的场景。把反向代理叫成负载均衡器就好像把代理叫成翻墙器一样。
发布于 2016-09-18
正向代理时,c通过p请求s,c知道它通过了p,而s不知道存在p(通常情况下)。
反向代理正好反过来了,c请求s,c其实不知道先经过了p,而s恰恰知道请求是由p转送过来。
比如browser,nginx,php-fpm,php-fpm知道请求不是browser直接过来的,是通过某个p过来,虽然不一定知道那个p是nginx,而browser却不知道它的请求是先到了nginx再到php-fpm
发布于 2016-10-10

有X,Y,Z三台,X想访问Z,Y是代理服务。

正向代理:X知道Z,可能也知道Y,X的request被Y截获,然后以Y的名义去访问Z,把结果返回,这个过程Y是代理X的。

反向代理:X不知道Z,X知道Y的存在,request到Y之后,实际Y回去访问Z,把结果返回,这个过程Y是代理Z的。

很多时候都是正向代理,反向代理的服务一般就是load balancer,web 加速等。

正或反就是看代理的是client还是server。

发布于 2017-06-13
内网访问外网需要一个中转机,因此人们发明了代理这个词。后来又遇到外网访问内网也需要一个中转机,为了区别这两种形式,后一种就叫反向代理。
发布于 2017-04-25
客户端要访问一个图片,web服务器上没有,web服务器就去访问专门存放静态资源的服务器,获取图片返回给用户,那这台存放静态资源的服务器就是反向代理服务器,不知道这样理解对不对?
编辑于 2016-03-10

我们看到的术语都翻译自英文,理解反向代理从英文入手也是一个好思路。


理解反向代理(Reverse Proxy)之前首先要明白什么是正向代理(Proxy

代理 Proxy 翻译:a person(代理) authorized to act for another (代理的对象)

一般的代理(正向)的代理对象是:请求方,让你做什么你就代它做什么。

反向代理即代理服务方,替服务端做事。服务端的服务它全代理了。


Proxy 正向代理: act as a client

Reverse Proxy 反向代理: act as a server


总结一下:

正向代理:代理客户端,将客户端的请求 等价 转发请求到服务端,代理机不了解服务端任何情况

反向代理:代理服务端,代替服务端接收服务,代理机需要与服务端建立映射关系(配置)

编辑于 2017-09-12

正向代理:代理的客户端去访问服务器


反向代理:代理的服务器去返回客户端

发布于 2017-07-27

很有用,容易理解

发布于 2017-07-06

正向代理:客户端发起的请求,通过代理服务器,转发给服务器,然后再把服务器返回的内容,转交给客户端。这种服务器只响应代理服务器请求的模式,就是正向代理模式。

反向代理:客户端发起的请求,被一台总代理服务器分发给不同的服务器,交由不同的服务器响应。这种客户端不知道是由哪一台服务器响应它的请求的模式,即使反向代理模式。

编辑于 2017-06-19

got it

编辑于 2017-05-12

正向代理(客户):重点在于体现代理商代理1个商户(产品)为N个客户服务,代理商侧重为多个客户服务(eg.HTTP代理为多个人提供翻墙服务)

反向代理(商户):重点在于体现代理商代理N个商户(产品)为某1客户服务,代理商侧重为多个商户服务(eg.百度外卖为多个商户提供平台给某个用户提供外卖服务)。

站的角度同一样,称呼可能就不一样.

发布于 2017-05-08

给客户端代理叫(正向)代理
例如用vpn,本来客户端直接访问一些网页,现在像google等访问不了,vpn代理客户端请求,访问google。


给服务器端做代理叫反向代理
例如nginx,本来服务器tomcat,jetty能直接让用户请求访问,但是它们选择让nginx作为自己的代理,让用户线请求nginx,再转发到它们上面。
发布于 2017-04-27
正向代理是代替用户去访问服务器
反向代理是代替服务器来响应用户
同样的技术,简单的区别,应用场景不同而已
编辑于 2017-09-01
有很多答案都说了反向代理和正向代理的原理,那么题主可能想问为啥叫反向呢!我的理解是这样的,这个正向代理呢,主要是解决 client 端的需求的,代理 client ,也隐藏了 client ,那么与 client 相对应的自然是 server ,那么对 server 端的代理该叫啥名呢,自然就是反向代理喽,谁让你 client 端的代理叫正向代理呢,server 能怎么办,server 也很无奈啊!
反向并不表明什么东西反向,只是请求的两端名称而已,用以区别代理的是哪个端!
编辑于 2017-04-25
正向代理是帮助多个用户访问某些网站的。反向代理是帮助多个网站主机向用户提供服务的。
发布于 2017-04-24

很简单

正向代理是客户端的人搭建的

反向代理是服务器的人搭建的
发布于 2017-04-22

不知道,对于有没有人对这种情况有疑问的,如:一个墙外的nginx服务器是个一个反向代理,想要去访问该服务器,却需要一个正向代理。这种情况会不会出现,如果出现的话,需要注意什么呢?

发布于 2017-04-13

什么时候需要用到反向代理呢

发布于 2017-02-28
终于明白了
发布于 2017-02-06

正向代理就是你挂代理上网站

反向代理就是网站挂代理上你

发布于 2017-04-24
终于明白了
发布于 2016-07-10

In computer networks, a reverse proxy is a type of proxy server that retrieves resources on behalf of a client from one or more servers. These resources are then returned to the client as though they originated from the proxy server itself.


While a forward proxy acts as an intermediary for its associated clients to contact any server, a reverse proxy acts as an intermediary for its associated servers to be contacted by any client.


Quite often, popular web servers have also some reverse-proxying functionality, acting as shields for application frameworks with weaker HTTP capabilities.


来自Wikipeida的定义。简单明了。

发布于 2016-05-09

原创粉丝点击