代理服务器和反向代理服务器有什么区别?


1772

代理服务器和反向代理服务器有什么区别?


51
Apache文档对此进行了很好的解释。
Paolo 2012年

3
@Paolo,使得它容易比维基百科的文章来了解。也许我应该最终将一些信息编辑到Wikipedia文章中……
RastaJedi

可以说我有主机A,它需要连接到主机C,但是没有直接连接。而是将其配置为带有主机条目或dns的主机,以调用B将请求转发给C。C不在乎或不了解B。这是前向代理还是反向代理?
丹尼尔·里奇

如果主机A在没有配置为首先联系主机B之前无法到达主机C,则主机B是传统的转发或“出站”代理服务器。
TaylorMonacelli

5
转发代理授予客户匿名(即,认为Tor)。反向代理授予后端服务器匿名性(即认为DMZ后面的服务器)。
8bitjunkie

Answers:


2968

先前的答案是准确的,但可能太简洁了。我将尝试添加一些示例。

首先,“代理”一词是指某人或某物代表他人行事。

在计算机领域,我们正在谈论一个服务器代表另一台计算机。

出于可访问性的目的,我将讨论仅限于Web代理-但是,代理的想法不仅限于网站。

转发代理

Web代理的大多数讨论都涉及代理的类型,称为“转发代理”。

在这种情况下,代理事件是“转发代理”代表原始被请求者从另一个网站检索数据。

3台电脑的故事(第一部分)

例如,我将列出三台连接到互联网的计算机。

  • X =您的计算机或Internet上的“客户端”计算机
  • Y =代理网站,proxy.example.org
  • Z =您要访问的网站www.example.net

通常,人们会直接从 X --> Z.

但是,在某些情况下,最好Y --> Z代表进行X链接,如下所示:X --> Y --> Z

X为什么要使用转发代理服务器的原因:

这是(非常)部分使用转发代理服务器的列表:

  • 1)X无法直接访问Z,因为

    • a)具有对XInternet连接的管理权限的人已决定禁止所有对站点的访问Z

      • 例子:

        • 风暴蠕虫病毒通过诱使人们访问而传播familypostcards2008.com,因此系统管理员已阻止对该站点的访问,以防止用户无意中感染自己。

        • 一家大公司的员工一直在浪费太多时间facebook.com,因此管理层希望在工作时间内阻止访问。

        • 当地的一所小学不允许访问该playboy.com网站。

        • 政府无法控制新闻的发布,因此它会通过阻止诸如的网站来控制对新闻的访问wikipedia.org。参见TORFreeNet

    • b)的管理员Z已阻止X

      • 例子:

        • Z的管理员已经注意到来自X的黑客攻击尝试,因此管理员决定阻止X的IP地址(和/或网络范围)。

        • Z是论坛网站。 X正在向论坛发送垃圾邮件。Z块X。

反向代理

3台计算机的故事(第二部分)

对于此示例,我将列出连接到Internet的三台计算机。

  • X =您的计算机或Internet上的“客户端”计算机
  • Y =反向代理网站,proxy.example.com
  • Z =您要访问的网站www.example.net

通常,人们会直接从 X --> Z.

但是,在某些情况下,对于管理员来说,最好Z限制或禁止直接访问并强制访问者先通过Y。因此,像以前一样,我们的数据Y --> Z代表检索X,其链接如下:X --> Y --> Z

这次与“转发代理”相比,不同之处在于,这次用户X不知道他正在访问Z,因为用户X只能看到他正在与之通信Y。服务器Z对客户端不可见,并且只有反向代理Y在外部可见。反向代理不需要在客户端进行任何(代理)配置。

客户X认为他只与YX --> Y)通信,但实际情况是Y转发所有通信(X --> Y --> Z再次)。

Z为什么要设置反向代理服务器的原因:

  • 1)Z希望强制到其网站的所有流量先通过Y。
    • a)Z拥有一个数百万人想要看到的大型网站,但是单个Web服务器无法处理所有流量。因此,Z设置了许多服务器,并在互联网上放置了一个反向代理,当用户尝试访问Z时,会将它们发送到距离他们最近的服务器。这是内容分发网络(CDN)概念工作方式的一部分。
  • 2)Z的管理员担心会对服务器上托管的内容进行报复,并且不希望直接向公众公开主服务器。
    • a)“加拿大药房”等垃圾邮件品牌的所有者似乎拥有数千台服务器,而实际上,大多数网站托管的服务器要少得多。此外,对垃圾邮件的滥用投诉只会关闭公共服务器,而不会关闭主服务器。

在上述情况下,Z具有选择的能力Y

链接到帖子中的主题:

内容传递网络

转发代理软件(服务器端)

HTTP的反向代理软件(服务器端)

TCP的反向代理软件(服务器端)

也可以看看:


1
TAM(tivoli访问管理器)也是反向代理服务器,对吗?
克拉克·鲍

2
那么从概念上讲,我们可以将“反向代理”称为“强制”代理吗?
托马斯

3
“它将把用户发送到离他们最近的服务器上”-有什么意义?所有流量都将通过该代理服务器,对吗?因此,“本地”服务器后面的位置无关紧要。还是我想念什么?
帕维尔

2
@Pavel可能是“离他们最近的服务器”不是最好的描述。更好的描述是“将负载分配到服务器池”。此示例描述了反向代理负载平衡器。
JDS

6
这是我的关键:-正向:(X --> Y) --> Z,反向:X --> (Y --> Z)
Druckles


413

我发现下面的图表非常有帮助。它仅显示了通过Internet从客户端到服务器的正向反向代理设置的体系结构。此图像将帮助您更好地了解qyb2zm302的答案和其他答案。

正向代理与反向代理

您还可以从Peter Silva的F5DevCentral观看此视频

图片来源:Quora。但是,根据Martijn Pieters所说,该图像可能来自Pulse Secure社区或Julien Pauli的网站(法语)位于developpez.com。

它使我想起了经典的谚语:

一幅图片值一千字。


9
这确实是您需要查看的所有内容。在浏览器中设置代理,以使Netflix不知道您所在的国家/地区是转发代理;定向传入请求(也许您想将一个请求发送到两个服务器)的上游服务是反向代理。
凯尔·查达

5
转发代理也可以在互联网上
mac

7
最后一个答案中最好的图片。谢谢。:)反向代理也称为“负载平衡器”,它在服务器端起作用(将负载分配给不同的服务器),而正向代理则支持客户端。
codepleb

1
法定作者不是图像的原始作者,因为此页面来自2013年,并进行了单次修订
马丁·彼得斯

1
可能是源于2009年的该法语教程。在2009年的Web归档副本是有问题的JavaScript(续重定向),并且图像在2017年只存档,但源引用相同的图像的URL为以后的来源。
马丁·彼得斯

230

正向代理与反向代理(2012)非常清楚地解释了正向和反向代理之间的区别。

qyb2zm302的答案很好地详细说明了代理的应用,但它忽略了正向和反向代理之间的基本概念。对于反向代理,X→Y→Z,X知道Y而不是Z,而不是Z。

代理仅仅是通信(请求+响应)的中间人。客户端<->代理<->服务器

  • 客户机代理:客户端< - >代理 < - >服务器

代理代表客户行事。客户知道该链中涉及的所有三台机器。服务器没有。

  • 服务器代理:客户端<-> 代理<->服务器

代理代表服务器。客户端只知道代理。服务器知道整个链。

在我看来,正向反向仅仅是客户机服务器代理的令人困惑的,与透视图相关的名称。我建议为后者而放弃前者,以便进行明确的沟通。

当然,使问题更复杂的是,并非每台机器都专门是客户端或服务器。如果上下文中存在歧义,则最好明确指定代理位于何处以及它通过隧道传输的通信。


3
这个答案是符合httpd.apache.org/docs/2.0/mod/mod_proxy.html#forwardreverse并有助于解释清楚
格雷格·伍兹

7
在此比较中,最相关的功能似乎是谁知道谁。正向代理:客户端知道代理(实际上已经配置了代理)和目标服务器(因为它向服务器的url发出请求),而对于反向代理,客户端知道代理作为目标服务器(它不知道代理实际上在调用什么;它可以是一台或更多服务器。使用转发代理时,服务器不知道客户端的真实身份,因为代理对其进行“转发”请求。转发代理:隐藏客户端。反向代理:隐藏服务器。
Belun'3

@Protongun“ ..代理仅仅是通信(请求+响应)的中间人。”首先,代理的需求是什么?请说清楚。恕我直言,这个答案应该是公认的答案
vikramvi

在这篇文章的第一个环节清楚,容易理解为大家
传奇

@Belun用最简单的词/术语很好地解释了。
Ilangeeran

129

一些图表可能会有所帮助:

转发代理

转发代理

反向代理

反向代理


8
是吗?他们看起来一样!重新编写使代理成为“反向”代理的响应有何特别之处?
8bitjunkie '16

2
@ 8bitjunkie它关于视角。请注意,对于正向代理,客户端知道它正在与代理服务器进行通信。对于反向代理,客户端认为它正在直接与home.com通信。代理也有不同的实现。反向代理可能非常愚蠢。它所要做的就是更改地址并传递呼叫。客户端上的网络逻辑更多,代理上的逻辑更少。另一方面,前向代理需要以某种方式知道对proxy.com()的请求需要调用service.com。客户端上的网络逻辑更少,代理上的逻辑更多。
凯文

1
myhome.myhosting.com 转换为hom.com”的含义是什么,我没有翻译部分。像重写响应头的一部分还是什么?
1252748 '16

反向代理的原因之一(基于我从接受的答案中得出的理解)是,这样做的目的是在多个服务器之间分配大量传入流量。这在哪里发生?那是另一个“入站规则”吗?
1252748 '16

@ 1252748(约1),翻译仅表示映射URL并向适当的URL发出请求。大约2),是的,您可以将服务器配置为例如使用轮询来平衡服务器之间的请求。
Maria Ines Parnisari '16

72

区别主要在于部署。Web正反代理都具有相同的基本功能。它们通常以访问原始服务器或联系服务器的方式接受各种格式的HTTP请求并提供响应。

功能齐全的服务器通常具有访问控制,缓存和某些链接映射功能。

转发代理是通过配置客户端计算机访问的代理。客户端需要协议支持代理功能(重定向,代理身份验证等)。代理对用户体验透明,但对应用程序透明。

反向代理是部署为Web服务器并表现得像Web服务器的代理,不同之处在于,它不是将程序和磁盘中的内容本地组成,而是将请求转发到原始服务器。从客户端的角度来看,它一个Web服务器,因此用户体验是完全透明的。

实际上,对于不同的客户群,单个代理实例可以同时作为正向和反向代理运行。


可以肯定的是,正向代理是客户端,而反向代理是服务器端?
伊夫2014年

4
@yves。代理也是服务器。只是客户端需要本地配置以便他们可以通信。而反向代理需要在服务器本身进行配置。它们的物理节点都在“服务器端”。
Adib Aroui 2014年

仅就一般信息而言,并非所有代理都可以正向和反向操作,例如SOCKS可以,但HTTP代理则不能。
RastaJedi '16

60

代理:它代表客户端发出请求。因此,服务器将响应返回给代理,并且代理会将响应转发给客户端。实际上,服务器永远不会“了解”客户端的用户身份(客户端的IP地址)。它只会知道代理。但是,客户端肯定知道服务器,因为它实质上格式化了发往服务器的HTTP请求,但只是将其交给代理。

在此处输入图片说明

反向代理:它代表服务器接收请求。它将请求转发到服务器,接收响应,然后将响应返回给客户端。在这种情况下,客户端将永远不会“学习”谁是实际的服务器(服务器的IP地址)(有些例外);它只会知道代理。服务器将知道或不知道实际的客户端,具体取决于反向代理的配置。

在此处输入图片说明


6
我觉得我可以向后复制并粘贴您的定义,并且它们仍然是正确的。我不认为这可以解释任何关键差异,也不能澄清反向代理的“反向”含义是什么?
8bitjunkie 2016年

6
代理将始终代表某人行事(与另一方隐藏其身份)。“反向”是指反转其“隐藏”的一面,它是第一种情况下的客户端(常规代理)和第二种情况下的服务器(反向代理)。确实,这些术语可以互换使用,选择第一种情况作为常规代理人(可能出于历史原因)只是一个惯例。希望这是有道理的。
Dimos

43

最好的解释在这里与图表:

虽然转发代理代表客户的代理人或请求主机,一个反向代理代表服务器的代理。

实际上,前向代理隐藏了客户端的身份,而反向代理则隐藏了服务器的身份。


38

代理服务器通过Internet代理(并可选地缓存)对各种不必要的公共资源的传出网络请求。反向代理捕获(并可选地缓存)来自Internet的传入请求,并将它们分发到各种内部专用资源,通常是出于高可用性的目的。



28

代理(转发代理):

LAN上的计算机连接到访问Internet的代理服务器时。好处包括仅将服务器暴露给Internet。外面的人无法直接访问计算机。转发代理可以通过缓存下载来改善用户的Internet访问。它们还可用于限制对某些站点的访问。同样,只有代理服务器需要一个公共地址,而不需要连接到它的客户端。

反向代理:

反向代理与正向代理相反。相反,它充当所连接服务器的代理。用户将直接通过反向代理并从那里定向到适当的服务器,而不是直接访问远程服务器。仅反向代理需要SSL证书,仅需要一个公共IP地址,并且它可以处理传入请求的负载平衡以增强整体用户体验。

在此处输入图片说明

图像源:使用应用程序请求路由创建转发代理


3
恕我直言,最简单/最好的答案。
ViniciusGonçalves18年

12

Apache的角度来看,我的理解是代理意味着如果站点x代理站点y,则请求x返回y。

反向代理意味着对y的响应进行了调整,以便所有对y的引用都变为x。

这样用户就无法分辨是否涉及代理...


10

据我了解...

首先,众所周知,代理代表“代表他人的权力”。现在有两件事,正向和反向代理。

转发代理

假设您要访问“ Google”,而“ Google”又将有n个服务器来响应该特定请求。

现在,在这种情况下,当您从Google请求某项内容并且您不希望Google查看您的IP地址时,您将使用转发代理,如下所述。

A→B→C

现在您是A,通过B发送请求。因此C会认为该请求来自B,而不是A。这样可以防止您的客户端IP地址暴露给外部环境。

反向代理

现在,在这种情况下,为了使您理解,我们将采用相同的正向代理案例。在这里,您已经向Google请求了一些东西,后者又将一个请求发送到应用服务器或另一台代理服务器以获取响应。因此,这些事情将按照以下说明进行。

A→B→C

C→D

C←D

A←B←C

从上图可以看出,一个请求是从B发送到C的,而不是从A发送的。然后,从C到D的请求是一个。同样,响应将从D到C,然后是B和A。

上图表示,尽管两个代理都以相同的方式运行,但是只有上下文才重要,但是客户端代理将隐藏客户端信息,而服务器端代理将隐藏服务器信息。



9

这是反向代理的示例(作为负载均衡器)。

客户端浏览website.com,并且它命中的服务器上运行着反向代理。反向代理恰好是Pound。磅接收请求并将其发送到位于其后的三个应用程序服务器之一。在此示例中,Pound是负载平衡器。也就是说,它正在平衡三个应用程序服务器之间的负载。

应用服务器将网站内容提供回客户端。


8

前向代理服务于用户:它帮助用户访问服务器

反向代理服务于服务器:它保护服务器免受用户的攻击


4

如果没有代理

从客户端和服务器端看是一样的:

客户端->服务器

代理

从客户端:

客户端->代理->服务器

从服务器端:

客户端->服务器

反向代理

从客户端:

客户端->服务器

从服务器端:

客户端->代理->服务器

因此,我认为如果它是由客户端用户设置的,则称为代理;如果是由服务器管理器设置的,则它是反向代理。

由于设置目的和原因不同,因此它们以不同的方式处理数据并使用不同的软件。

   User side          |      Server side
client  <->  proxy  <-->  reverse_proxy <-> real server

如果它的图形表示但内容不错,那就更好了。@ tinyhare
Narendra,

3

从用户的角度来看:发送到一个请求时,代理反向代理服务器:

  • proxy-需要两个参数

    1)要获取的内容; 2)要使用中间服务器的代理服务器

  • 反向代理 -需要一个参数

    1)得到什么

反向代理从用户不知道的另一个服务器获取内容,并返回结果,就好像它源自反向代理服务器一样


1

先前的大多数答案都是好的,但是我认为没有一个解决方案能够很好地解决区分两者的“反向”质量。为此,需要提供某种可视化本质上相同的事物(代理)的“反向”本质的方式,并且需要以一种抽象的方式给出它。

一个代理(隐式“转发代理”)多个本地客户端连接到任何一个远程服务器:

c--
   |--p--s
c--

反向代理多个本地服务器可连接到任何一个远程客户端(通知如何布局反转):

s--
   |--p--c
s--

真正地和正确地理解概念需要抽象一些非必要的细节(对于特定概念),这是一个观点问题,尽管在代理操作的实用性方面它们可能非常重要。这样的细节包括以下事实:在这两种情况下,现实都是多个客户端连接到多个服务器,客户端和服务器可能不是真正的本地或远程,Internet云所在的位置或客户端和服务器之间存在何种可见性。


“向任何一个远程客户端提供多个本地服务器”-嗯,为什么不向多个客户端提供多个服务器?我的意思是-服务器本身无论如何都不连接到客户端,它仅响应任何客户端请求,无论这些请求是多个客户端还是同一客户端。
JustAMartin

再次阅读-尤其是最后一段,并试图了解“任何一个远程客户端”操作的许多情况下,作为一个
亚历Fotios

文字还可以,只是第二张图突然让我想到:“嘿,另一个客户去哪儿了?” 当我将其与第一张图进行比较时。
JustAMartin

是的,这是因为该客户不是其他两个客户中的任何一个。开发人员倾向于用非常具体和具体的方式进行思考,因为这在您实现事物时会有所帮助,但是在考虑抽象时,相同的思维方式就没有太大帮助。
Alex Fotios
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.