代理服务器和反向代理服务器有什么区别?
代理服务器和反向代理服务器有什么区别?
Answers:
先前的答案是准确的,但可能太简洁了。我将尝试添加一些示例。
首先,“代理”一词是指某人或某物代表他人行事。
在计算机领域,我们正在谈论一个服务器代表另一台计算机。
出于可访问性的目的,我将讨论仅限于Web代理-但是,代理的想法不仅限于网站。
Web代理的大多数讨论都涉及代理的类型,称为“转发代理”。
在这种情况下,代理事件是“转发代理”代表原始被请求者从另一个网站检索数据。
例如,我将列出三台连接到互联网的计算机。
通常,人们会直接从 X --> Z.
但是,在某些情况下,最好Y --> Z
代表进行X
链接,如下所示:X --> Y --> Z
。
这是(非常)部分使用转发代理服务器的列表:
1)X无法直接访问Z,因为
a)具有对X
Internet连接的管理权限的人已决定禁止所有对站点的访问Z
。
b)的管理员Z
已阻止X
。
例子:
Z的管理员已经注意到来自X的黑客攻击尝试,因此管理员决定阻止X的IP地址(和/或网络范围)。
Z是论坛网站。 X
正在向论坛发送垃圾邮件。Z块X。
对于此示例,我将列出连接到Internet的三台计算机。
通常,人们会直接从 X --> Z.
但是,在某些情况下,对于管理员来说,最好Z
限制或禁止直接访问并强制访问者先通过Y。因此,像以前一样,我们的数据Y --> Z
代表检索X
,其链接如下:X --> Y --> Z
。
这次与“转发代理”相比,不同之处在于,这次用户X
不知道他正在访问Z
,因为用户X
只能看到他正在与之通信Y
。服务器Z
对客户端不可见,并且只有反向代理Y
在外部可见。反向代理不需要在客户端进行任何(代理)配置。
客户X
认为他只与Y
(X --> Y
)通信,但实际情况是Y
转发所有通信(X --> Y --> Z
再次)。
在上述情况下,Z
具有选择的能力Y
。
(X --> Y) --> Z
,反向:X --> (Y --> Z)
。
一对简单的定义是:
转发代理:代表请求者(或服务使用者)代理
反向代理:代表服务/内容生产者。
我发现下面的图表非常有帮助。它仅显示了通过Internet从客户端到服务器的正向与反向代理设置的体系结构。此图像将帮助您更好地了解qyb2zm302的答案和其他答案。
您还可以从Peter Silva的F5的DevCentral观看此视频。
图片来源:Quora。但是,根据Martijn Pieters所说,该图像可能来自Pulse Secure社区或Julien Pauli的网站(法语)位于developpez.com。
它使我想起了经典的谚语:
一幅图片值一千字。
正向代理与反向代理(2012)非常清楚地解释了正向和反向代理之间的区别。
qyb2zm302的答案很好地详细说明了代理的应用,但它忽略了正向和反向代理之间的基本概念。对于反向代理,X→Y→Z,X知道Y而不是Z,而不是Z。
代理仅仅是通信(请求+响应)的中间人。客户端<->代理<->服务器
代理代表客户行事。客户知道该链中涉及的所有三台机器。服务器没有。
代理代表服务器。客户端只知道代理。服务器知道整个链。
在我看来,正向和反向仅仅是客户机和服务器代理的令人困惑的,与透视图相关的名称。我建议为后者而放弃前者,以便进行明确的沟通。
当然,使问题更复杂的是,并非每台机器都专门是客户端或服务器。如果上下文中存在歧义,则最好明确指定代理位于何处以及它通过隧道传输的通信。
一些图表可能会有所帮助:
转发代理
反向代理
区别主要在于部署。Web正反代理都具有相同的基本功能。它们通常以访问原始服务器或联系服务器的方式接受各种格式的HTTP请求并提供响应。
功能齐全的服务器通常具有访问控制,缓存和某些链接映射功能。
转发代理是通过配置客户端计算机访问的代理。客户端需要协议支持代理功能(重定向,代理身份验证等)。代理对用户体验透明,但对应用程序透明。
反向代理是部署为Web服务器并表现得像Web服务器的代理,不同之处在于,它不是将程序和磁盘中的内容本地组成,而是将请求转发到原始服务器。从客户端的角度来看,它是一个Web服务器,因此用户体验是完全透明的。
实际上,对于不同的客户群,单个代理实例可以同时作为正向和反向代理运行。
代理:它代表客户端发出请求。因此,服务器将响应返回给代理,并且代理会将响应转发给客户端。实际上,服务器永远不会“了解”客户端的用户身份(客户端的IP地址)。它只会知道代理。但是,客户端肯定知道服务器,因为它实质上格式化了发往服务器的HTTP请求,但只是将其交给代理。
反向代理:它代表服务器接收请求。它将请求转发到服务器,接收响应,然后将响应返回给客户端。在这种情况下,客户端将永远不会“学习”谁是实际的服务器(服务器的IP地址)(有些例外);它只会知道代理。服务器将知道或不知道实际的客户端,具体取决于反向代理的配置。
代理服务器通过Internet代理(并可选地缓存)对各种不必要的公共资源的传出网络请求。反向代理捕获(并可选地缓存)来自Internet的传入请求,并将它们分发到各种内部专用资源,通常是出于高可用性的目的。
代理(转发代理):
LAN上的计算机连接到访问Internet的代理服务器时。好处包括仅将服务器暴露给Internet。外面的人无法直接访问计算机。转发代理可以通过缓存下载来改善用户的Internet访问。它们还可用于限制对某些站点的访问。同样,只有代理服务器需要一个公共地址,而不需要连接到它的客户端。
反向代理:
反向代理与正向代理相反。相反,它充当所连接服务器的代理。用户将直接通过反向代理并从那里定向到适当的服务器,而不是直接访问远程服务器。仅反向代理需要SSL证书,仅需要一个公共IP地址,并且它可以处理传入请求的负载平衡以增强整体用户体验。
图像源:使用应用程序请求路由创建转发代理
据我了解...
首先,众所周知,代理代表“代表他人的权力”。现在有两件事,正向和反向代理。
假设您要访问“ 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。
上图表示,尽管两个代理都以相同的方式运行,但是只有上下文才重要,但是客户端代理将隐藏客户端信息,而服务器端代理将隐藏服务器信息。
转发代理授予客户匿名(即,认为Tor)。
反向代理授予后端服务器匿名性(即认为DMZ后面的服务器)。
如果没有代理
从客户端和服务器端看是一样的:
客户端->服务器
代理
从客户端:
客户端->代理->服务器
从服务器端:
客户端->服务器
反向代理
从客户端:
客户端->服务器
从服务器端:
客户端->代理->服务器
因此,我认为如果它是由客户端用户设置的,则称为代理;如果是由服务器管理器设置的,则它是反向代理。
由于设置目的和原因不同,因此它们以不同的方式处理数据并使用不同的软件。
User side | Server side
client <-> proxy <--> reverse_proxy <-> real server
先前的大多数答案都是好的,但是我认为没有一个解决方案能够很好地解决区分两者的“反向”质量。为此,需要提供某种可视化本质上相同的事物(代理)的“反向”本质的方式,并且需要以一种抽象的方式给出它。
一个代理(隐式“转发代理”)多个本地客户端连接到任何一个远程服务器:
c--
|--p--s
c--
甲反向代理多个本地服务器可连接到任何一个远程客户端(通知如何布局反转):
s--
|--p--c
s--
真正地和正确地理解概念需要抽象一些非必要的细节(对于特定概念),这是一个观点问题,尽管在代理操作的实用性方面它们可能非常重要。这样的细节包括以下事实:在这两种情况下,现实都是多个客户端连接到多个服务器,客户端和服务器可能不是真正的本地或远程,Internet云所在的位置或客户端和服务器之间存在何种可见性。