代理服务器和反向代理服务器有什么区别?
21 回答
之前的答案是准确的,但可能过于简洁。我将尝试添加一些示例。
首先,“代理”一词描述了代表他人行事的某人或某事。
在计算机领域,我们谈论的是一个服务器代表另一台计算机。
出于可访问性的目的,我将把我的讨论限制在网络代理上——但是,代理的想法并不局限于网站。
转发代理
大多数关于 Web 代理的讨论都是指称为“转发代理”的代理类型。
在这种情况下,代理事件是“转发代理”代表原始请求者从另一个网站检索数据。
3 台计算机的故事(上)
例如,我将列出三台连接到 Internet 的计算机。
- X = 您的计算机,或 Internet 上的“客户端”计算机
- Y = 代理网站 proxy.example.org
- Z = 您要访问的网站,www.example.net
通常,一个人会直接从X --> Z.
但是,在某些场景下,最好是Y --> Z
代表X
,其中链如下:X --> Y --> Z
.
X 想要使用转发代理服务器的原因:
这是转发代理服务器的(非常)部分用途列表:
1) X 无法直接访问 Z,因为
a) 对
X
互联网连接具有管理权限的人已决定阻止对站点的所有访问Z
。b) 的管理员
Z
已阻止X
。例子:
Z 的管理员注意到来自 X 的黑客攻击,因此管理员决定阻止 X 的 IP 地址(和/或网络范围)。
Z是一个论坛网站。
X
正在向论坛发送垃圾邮件。Z 阻挡 X。
反向代理
3 台计算机的故事(第二部分)
对于这个例子,我将列出三台连接到互联网的计算机。
- 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
认为他只是在与Y
( X --> Y
) 通信,但实际情况是Y
转发所有通信 (X --> Y --> Z
再次)。
Z 想要设置反向代理服务器的原因:
- 1) Z 想要强制其网站的所有流量首先通过 Y。
- a) Z 有一个数百万人想查看的大型网站,但单个 Web 服务器无法处理所有流量。因此 Z 设置了许多服务器并在 Internet 上放置了一个反向代理,当用户尝试访问 Z 时,该代理会将用户发送到离他们最近的服务器。这是内容分发网络 (CDN) 概念工作原理的一部分。
- 例子:
- Apple Trailers使用Akamai
- Jquery.com 使用CloudFront CDN(示例)托管其 JavaScript 文件。
- 等等
- 例子:
- a) Z 有一个数百万人想查看的大型网站,但单个 Web 服务器无法处理所有流量。因此 Z 设置了许多服务器并在 Internet 上放置了一个反向代理,当用户尝试访问 Z 时,该代理会将用户发送到离他们最近的服务器。这是内容分发网络 (CDN) 概念工作原理的一部分。
- 2)Z的管理员担心托管在服务器上的内容遭到报复,不想将主服务器直接暴露给公众。
- a) “Canadian Pharmacy”等垃圾邮件品牌的所有者似乎拥有数千台服务器,而实际上大多数网站托管在更少的服务器上。此外,关于垃圾邮件的滥用投诉只会关闭公共服务器,而不是主服务器。
在以上场景中,Z
都有选择的能力Y
。
帖子中的主题链接:
内容交付网络
- CDN 列表
转发代理软件(服务器端)
HTTP反向代理软件(服务器端)
- Apache mod_proxy(也可以作为 HTTP 的转发代理)
- nginx (用于 hulu.com、垃圾邮件网站等)
- HAProxy
- 球童网络服务器
- 轻型httpd
- perlbal(为 livejournal 编写)
- 端口融合
- 磅
- 清漆缓存(由FreeBSD 内核大师编写)
- 休息
TCP反向代理软件(服务器端)
也可以看看:
A pair of simple definitions would be:
Forward Proxy: Acting on behalf of a requestor (or service consumer)
Reverse Proxy: Acting on behalf of service/content producer.
我发现下面的图表非常有帮助。它只是显示了通过 Internet 从客户端到服务器的正向与反向代理设置的体系结构。此图将帮助您更好地理解qyb2zm302 的答案和其他答案。
您还可以观看Peter Silva的来自F5的DevCentral的视频。
图片来源:知乎。然而,根据Martijn Pieters的说法,这张图片可能来自Pulse Secure Community或 Julien Pauli 在developpez.com 上的网站(法语)。
这让我想起了一句经典谚语:
一张图片值1000字。
Forward Proxy vs. Reverse Proxy (2012) 非常清楚地解释了正向和反向代理之间的区别。
qyb2zm302 的回答很好地详细说明了代理的应用程序,但它在正向和反向代理之间的基本概念上有所失误。对于反向代理,X → Y → Z,X 知道 Y 而不是 Z,反之亦然。
代理只是通信(请求+响应)的中间人。客户端 <-> 代理 <-> 服务器
- 客户端代理:(客户端<->代理) <->服务器
代理代表客户行事。客户端知道链中涉及的所有三台机器。服务器没有。
- 服务器代理:客户端<-> (代理<->服务器)
代理代表服务器行事。客户端只知道代理。服务器知道整个链。
在我看来,正向和反向只是客户端和服务器代理的令人困惑的、依赖于视角的名称。我建议为后者放弃前者,以进行明确的沟通。
当然,更复杂的是,并不是每台机器都只是客户端或服务器。如果上下文有歧义,最好明确指定代理所在的位置,以及它通过隧道传输的通信。
一些图表可能会有所帮助:
转发代理
反向代理
区别主要在于部署。Web 正向和反向代理都具有相同的基本功能。它们接受各种格式的 HTTP 请求并提供响应,通常是通过访问源服务器或联系服务器。
功能齐全的服务器通常具有访问控制、缓存和一些链接映射功能。
转发代理是通过配置客户端机器访问的代理。客户端需要对代理功能(重定向、代理身份验证等)的协议支持。代理对用户体验是透明的,但对应用程序不透明。
反向代理是一种部署为 Web 服务器的代理,其行为类似于 Web 服务器,不同之处在于它不是在本地组合来自程序和磁盘的内容,而是将请求转发到源服务器。从客户端的角度来看,它是一个 Web 服务器,因此用户体验是完全透明的。
事实上,单个代理实例可以同时针对不同的客户端群体作为正向和反向代理运行。
代理服务器将传出的网络请求代理(并且可选地缓存)到 Internet 上的各种非必要相关的公共资源。反向代理捕获(并且可选地缓存)来自 Internet 的传入请求,并将它们分发到各种内部私有资源,通常用于高可用性目的。
代理(正向代理):
当 LAN 上的计算机连接到访问 Internet 的代理服务器时。好处仅包括暴露于 Internet 的服务器。外面的人无法直接访问计算机。转发代理可以通过缓存下载来改善用户的 Internet 访问。它们还可用于限制对某些站点的访问。此外,只有代理服务器需要公共地址,而不是连接到它的客户端。
反向代理:
反向代理与正向代理相反。相反,它代表所连接的服务器充当代理。用户不会直接访问远程服务器,而是通过反向代理并从那里定向到适当的服务器。只有反向代理需要 SSL 证书,只需要一个公共 IP 地址,并且它可以处理传入请求的负载平衡以增强整体用户体验。
图片来源:使用应用程序请求路由创建正向代理
从Apache的角度来看,我的理解是代理意味着如果站点 x 代理站点 y,那么对 x 的请求返回 y。
反向代理意味着来自 y 的响应被调整,以便所有对 y 的引用都变为 x。
这样用户就无法分辨出涉及代理...
前向代理授予客户端匿名性(即认为Tor)。
反向代理授予后端服务器匿名性(即认为服务器位于 DMZ 后面)。
据我了解...
首先,众所周知,代理的意思是“代表他人的权力”。现在有两件事,正向和反向代理。
转发代理
假设您要访问“Google”,而“Google”又将有 n 个服务器来响应该特定请求。
现在在这种情况下,当您向 Google 请求某些内容并且您不希望 Google 看到您的 IP 地址时,您将使用转发代理,如下所述。
A → B → C
现在你是A,通过B发送请求。所以C会认为请求来自B,而不是A。这样你可以防止你的客户端IP地址不暴露给外界。
反向代理
现在在这种情况下,为了让您理解,我们将采用相同的转发代理案例。在这里,您向 Google 请求了一些东西,然后 Google 会将一个请求发送到应用服务器或另一台代理服务器以获取响应。因此,这些事情将如下所述发生。
A → B → C
C → D
C ← D
A ← B ← C
从上图中可以看出,一个请求是从 B 发送到 C 的,而不是从 A 发送的。然后从 C 将有一个请求发送到 D。同样,响应将从 D 到 C,然后到 B 和 A。
上图表明,尽管两个代理的行为方式相同,但只有上下文很重要,但是客户端代理隐藏了客户端信息,而服务器端代理将隐藏服务器端信息。
这是一个反向代理(作为负载均衡器)的示例。
一个客户端浏览到 website.com,它所访问的服务器上运行着一个反向代理。反向代理恰好是Pound。Pound 接收请求并将其发送到位于其后面的三个应用程序服务器之一。在此示例中,Pound 是一个负载均衡器。也就是说,它正在平衡三个应用程序服务器之间的负载。
应用程序服务器将网站内容返回给客户端。
转发代理服务于用户:它帮助用户访问服务器。
反向代理服务于服务器:它保护服务器免受用户的侵害。
如果没有代理
从客户端和服务器端看是一样的:
客户端 -> 服务器
代理人
从客户端:
客户端 -> 代理 -> 服务器
从服务器端:
客户端 -> 服务器
反向代理
从客户端:
客户端 -> 服务器
从服务器端:
客户端 -> 代理 -> 服务器
所以我觉得如果是客户端用户设置的,就叫代理;如果是服务器管理员设置的,就是反向代理。
因为设置它的目的和原因不同,它们处理数据的方式不同,使用的软件也不同。
User side | Server side
client <-> proxy <--> reverse_proxy <-> real server
从用户的角度来看:向代理或反向代理服务器发送请求时:
代理- 需要两个参数:
1)获取什么和 2)哪个代理服务器使用中间反向代理- 需要一个参数:
1)得到什么
反向代理从用户不知道的另一台服务器获取内容并返回结果,就好像它来自反向代理服务器一样。
代理服务器(也称为正向代理)和反向代理服务器之间的区别取决于参考点。
从技术上讲,两者完全相同。两者都用于代表源将数据传输到目的地的相同目的。
区别在于“代理服务器代表谁/代理服务器代表谁?”
如果代理服务器代表最终用户将请求转发到互联网服务器(例如:大学中的学生通过大学代理服务器访问互联网。),则代理称为“转发代理”或简称为“代理”。
如果代理服务器代表服务器响应传入的请求,则代理称为“反向代理”,因为从最终用户的角度来看,它以相反的方向工作。
反向代理的一些示例:
- Web 服务器前面的负载均衡器代表实际的 Web 服务器充当反向代理。
- API网关
- 免费的网站托管服务,如(facebook 页面/博客页面服务器)也是反向代理。实际内容可能在某个 Web 服务器中,但外界通过反向代理广告的特定 url 知道它。
使用正向代理:
- 监控来自组织的所有出站 Internet 连接
- 对互联网浏览应用安全策略并阻止下载恶意内容
- 阻止访问特定网站
使用反向代理:
- 为网站提供友好的 URL
- 跨多个 Web 服务器执行负载平衡
- 应用安全策略并保护实际 Web 服务器免受攻击
以前的大多数答案都很好,但在我看来,没有一个答案能够很好地解决区分两者的“反向”质量。为此,需要给出某种方式来可视化本质上相同的事物(代理)的“反向”性质,并且需要以一种非常抽象的方式给出。
代理(隐含的“转发代理”)将多个本地客户端连接到任何一个远程服务器:
c--
|--p--s
c--
反向代理将多个本地服务器连接到任何一个远程客户端(注意布局如何反转):
s--
|--p--c
s--
真正正确地理解这个概念是一个视角问题,需要抽象出非必要的(对于特定概念的)细节,尽管它们在代理操作的语用学方面可能非常重要。这些细节包括这样一个事实,即在这两种情况下,现实情况是多个客户端连接到多个服务器,客户端和服务器可能不是真正的本地或远程的,互联网云位于何处或客户端和服务器之间存在什么样的可见性。
让我们考虑一下服务的目的。
在正向代理中:
代理帮助用户访问服务器。
在反向代理中:
代理帮助用户访问服务器。
在后一种情况下,被代理帮助的不再是用户,而是服务器,这就是我们称之为反向代理的原因。