ChatGPT解决这个技术问题 Extra ChatGPT

代理服务器和反向代理服务器有什么区别? [关闭]

关闭。此问题不符合 Stack Overflow 准则。它目前不接受答案。我们不允许在 Stack Overflow 上提出有关专业服务器或网络相关基础设施管理的问题。您可以编辑问题,使其成为 Stack Overflow 的主题。 1年前关闭。改进这个问题

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

Apache docs 中也很好地解释了这一点。
@Paolo 这比维基百科的文章更容易理解。也许我应该最终将其中一些信息编辑到维基百科文章中......
假设我有主机 A 需要连接到主机 C,但不直接连接。相反,它被配置为带有主机条目或可能的 dns,以调用将请求转发给 C 的 B。C 不关心或不知道 B。这是正向代理还是反向代理?
如果主机 A 在未配置为首先联系主机 B 的情况下无法访问主机 C,则主机 B 是传统的转发或“出站”代理服务器。
正向代理授予客户端匿名性(即认为 Tor)。反向代理授予后端服务器匿名性(即认为服务器位于 DMZ 后面)。

2
25 revs, 19 users 69%

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

首先,“代理”一词描述了代表他人行事的某人或某事。

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

出于可访问性的目的,我将把我的讨论限制在网络代理上——但是,代理的想法并不局限于网站。

转发代理

大多数关于 Web 代理的讨论都是指称为“转发代理”的代理类型。

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

3 台计算机的故事(上)

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

X = 您的计算机,或 Internet 上的“客户端”计算机

= 代理网站 proxy.example.org

Z = 您要访问的网站,www.example.net

通常,可以直接从 X --> Z. 连接

但是,在某些情况下,最好由 Y --> Z 代表 X,其链接如下:X --> Y --> Z

X 想要使用转发代理服务器的原因:

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

1) X 无法直接访问 Z,因为 a) 对 X 的 Internet 连接具有管理权限的人已决定阻止对站点 Z 的所有访问。示例:Storm Worm 病毒通过诱骗人们访问 familypostcards2008.com 进行传播,因此系统管理员已阻止对该站点的访问,以防止用户无意中感染自己。一家大公司的员工在 facebook.com 上浪费了太多时间,因此管理层希望在工作时间阻止访问。当地一所小学禁止访问 playboy.com 网站。政府无法控制新闻的发布,因此它通过封锁 wikipedia.org 等网站来控制对新闻的访问。请参阅 TOR 或 FreeNet。 b) Z 的管理员已阻止 X。示例:Z 的管理员注意到来自 X 的黑客攻击,因此管理员决定阻止 X 的 IP 地址(和/或网络范围)。 Z是一个论坛网站。 X 正在向论坛发送垃圾邮件。 Z 阻挡 X。

a) 对 X 的 Internet 连接具有管理权限的人决定阻止对站点 Z 的所有访问。示例:Storm Worm 病毒通过诱骗人们访问 familypostcards2008.com 进行传播,因此系统管理员已阻止访问该站点以阻止用户访问从不经意间感染自己。一家大公司的员工在 facebook.com 上浪费了太多时间,因此管理层希望在工作时间阻止访问。当地一所小学禁止访问 playboy.com 网站。政府无法控制新闻的发布,因此它通过封锁 wikipedia.org 等网站来控制对新闻的访问。请参阅 TOR 或 FreeNet。

示例:Storm Worm 病毒通过诱骗人们访问 familypostcards2008.com 进行传播,因此系统管理员已阻止对该站点的访问,以防止用户无意中感染自己。一家大公司的员工在 facebook.com 上浪费了太多时间,因此管理层希望在工作时间阻止访问。当地一所小学禁止访问 playboy.com 网站。政府无法控制新闻的发布,因此它通过封锁 wikipedia.org 等网站来控制对新闻的访问。请参阅 TOR 或 FreeNet。

Storm Worm 病毒通过诱骗人们访问 familypostcards2008.com 进行传播,因此系统管理员已阻止对该站点的访问,以防止用户无意中感染自己。

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

当地一所小学禁止访问 playboy.com 网站。

政府无法控制新闻的发布,因此它通过封锁 wikipedia.org 等网站来控制对新闻的访问。请参阅 TOR 或 FreeNet。

b) Z 的管理员已阻止 X。示例:Z 的管理员注意到来自 X 的黑客攻击,因此管理员决定阻止 X 的 IP 地址(和/或网络范围)。 Z是一个论坛网站。 X 正在向论坛发送垃圾邮件。 Z 阻挡 X。

示例:Z 的管理员注意到来自 X 的黑客攻击,因此管理员决定阻止 X 的 IP 地址(和/或网络范围)。 Z是一个论坛网站。 X 正在向论坛发送垃圾邮件。 Z 阻挡 X。

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

Z是一个论坛网站。 X 正在向论坛发送垃圾邮件。 Z 阻挡 X。

反向代理

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

对于这个例子,我将列出三台连接到互联网的计算机。

X = 您的计算机,或 Internet 上的“客户端”计算机

= 反向代理网站 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 设置了许多服务器,并在互联网上放置了一个反向代理,当用户尝试访问 Z 时,它将把用户发送到离他们最近的服务器。这是内容分发网络 (CDN) 概念工作原理的一部分。示例:Apple Trailers 使用 Akamai Jquery.com 使用 CloudFront CDN 托管其 JavaScript 文件(示例)。等等

a) Z 有一个数百万人想查看的大型网站,但单个 Web 服务器无法处理所有流量。因此,Z 设置了许多服务器,并在互联网上放置了一个反向代理,当用户尝试访问 Z 时,它将把用户发送到离他们最近的服务器。这是内容分发网络 (CDN) 概念工作原理的一部分。示例:Apple Trailers 使用 Akamai Jquery.com 使用 CloudFront CDN 托管其 JavaScript 文件(示例)。等等

示例:Apple Trailers 使用 Akamai Jquery.com 使用 CloudFront CDN 托管其 JavaScript 文件(示例)。等等

Apple Trailers 使用 Akamai

Jquery.com 使用 CloudFront CDN(示例)托管其 JavaScript 文件。

等等

2)Z的管理员担心托管在服务器上的内容遭到报复,不想将主服务器直接暴露给公众。 a) “Canadian Pharmacy”等垃圾邮件品牌的所有者似乎拥有数千台服务器,而实际上大多数网站托管在更少的服务器上。此外,关于垃圾邮件的滥用投诉只会关闭公共服务器,而不是主服务器。

a) “Canadian Pharmacy”等垃圾邮件品牌的所有者似乎拥有数千台服务器,而实际上大多数网站托管在更少的服务器上。此外,关于垃圾邮件的滥用投诉只会关闭公共服务器,而不是主服务器。

在上述场景中,Z 可以选择 Y

帖子中的主题链接:

内容交付网络

CDN 列表 http://www.mytestbox.com/miscellaneous/content-delivery-networks-cdn-list/ http://blog.streamingmedia.com/the_business_of_online_vi/2008/01/updated-list-of.html

http://www.mytestbox.com/miscellaneous/content-delivery-networks-cdn-list/

http://blog.streamingmedia.com/the_business_of_online_vi/2008/01/updated-list-of.html

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

PHP-代理

cgi代理

phproxy(已停产)

字形

互联网审查维基:网络代理列表

鱿鱼(显然,也可以作为反向代理)

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

Apache mod_proxy(也可以作为 HTTP 的转发代理)

nginx(用于 hulu.com、垃圾邮件网站等)

HAProxy

球童网络服务器

轻型httpd

perlbal(为 livejournal 编写)

端口融合

清漆缓存(由 FreeBSD 内核大师编写)

休息

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

平衡

代表

端口融合

纯负载均衡器(网站已失效)

蟒蛇导演

也可以看看:

维基百科 - 内容交付网络

维基百科 - 类别:Reverse_proxy

维基百科 - 负载平衡

维基百科 - 可扩展性


TAM(tivoli 访问管理器)也是一个反向代理服务器,对吧?
那么从概念上讲,我们可以将“反向代理”称为或认为是“强制”代理吗?
“这会将用户发送到离他们最近的服务器” - 有什么意义?所有流量都将通过该代理服务器,对吗?因此,它背后的“本地”服务器的位置并不重要。或者我错过了什么?
@Pavel 可能“离他们最近的服务器”不是最好的描述。更像是“将负载分配到服务器池”是更好的描述。此示例描述了反向代理负载均衡器。
这对我来说是关键:- 正向:(X --> Y) --> Z,反向:X --> (Y --> Z)
P
Peter Mortensen

一对简单的定义是:

正向代理:代表请求者(或服务消费者)行事

反向代理:代表服务/内容生产者行事。


N
Nishant

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

https://i.stack.imgur.com/0qpxZ.png

您还可以在 F5DevCentral 中观看 Peter Silva 的 this video

图片来源:Quora。但是,根据 Martijn Pieters,此图像可能来自 Pulse Secure Community 或 Julien Pauli 在 developpez.com 上的 site(法语)。

这让我想起了一句经典谚语:

一张图片值1000字。


这确实是您需要查看的全部内容。在浏览器中设置代理,让 Netflix 不知道您所在的国家/地区是转发代理;引导传入请求的上游服务(也许您想将一个请求发送到两台服务器)是反向代理。
转发代理也可以在互联网上
最后一个答案中的最佳图片。谢谢。 :) 反向代理也称为“负载均衡器”,作用于服务器端(将负载分配到不同的服务器),而正向代理支持客户端。
quora 作者不是图像的原始作者,因为 this page from 2013 with a single revision 比原作者大一岁。
可能是 this french tutorial from 2009 是源; 2009 web archive copy 存在 javascript 问题(继续重定向),图像仅在 2017 年存档,但来源引用了与后来来源相同的图像 URL。
L
Legends

Forward Proxy vs. Reverse Proxy (2012) 非常清楚地解释了正向和反向代理之间的区别。

qyb2zm302's answer 很好地详细说明了代理的应用,但它在正向和反向代理之间的基本概念上出现了失误。对于反向代理,X → Y → Z,X 知道 Y 而不是 Z,反之亦然。

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

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

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

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

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

在我看来,正向和反向只是客户端和服务器代理的令人困惑的、依赖于视角的名称。我建议为后者放弃前者,以进行明确的沟通。

当然,更复杂的是,并不是每台机器都只是客户端或服务器。如果上下文有歧义,最好明确指定代理所在的位置,以及它通过隧道传输的通信。


这个答案与httpd.apache.org/docs/2.0/mod/mod_proxy.html#forwardreverse一致,有助于清楚地解释它
似乎这个比较中最相关的特征是谁知道谁。正向代理:客户端知道代理(实际上已经配置)和目标服务器(因为它向服务器的 url 发出请求),而在反向代理的情况下,客户端知道代理作为目标服务器(它不知道代理实际调用的是什么;它可以是一台或多台服务器)。使用转发代理,服务器不知道客户端到底是谁,因为代理“转发”请求给它。转发代理:隐藏客户端。反向代理:隐藏服务器。
@Protongun“..代理只是通信的中间人(请求+响应)..”首先需要代理什么?请说清楚。恕我直言,这个答案应该是被接受的
这篇文章中的第一个链接让每个人都清楚易懂
@Belun 用最简单的单词/术语解释得很好。
M
Maria Ines Parnisari

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

转发代理

https://i.stack.imgur.com/MPQAt.png

反向代理

https://i.stack.imgur.com/xrOba.png


是吗?他们看起来一样!重写使代理成为“反向”代理的响应有什么特别之处?
@8bitjunkie 它是关于视角的。请注意,对于转发代理,客户端知道它正在与代理服务器通信。对于反向代理,客户端认为它直接与 home.com 通信。代理也有不同的实现。反向代理可能非常愚蠢。它所要做的就是更改地址并传递呼叫。客户端上的网络逻辑更多,代理上的网络逻辑更少。另一方面,转发代理需要以某种方式知道对 proxy.com() 的请求需要调用 service.com。客户端上的网络逻辑更少,代理上的网络逻辑更多。
“将 myhome.myhosting.com 翻译成 hom.com”是什么意思,我不明白翻译部分。比如重写部分响应头之类的?
反向代理的原因之一(基于我从接受的答案中了解到的)是这样做的目的是在多个服务器之间分配大量传入流量。这发生在这个链条的什么地方?这是另一个“入站规则”吗?
@PeterMortensen 他们是我自己的
4
4 revs, 4 users 69%

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

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

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

反向代理是部署为 Web 服务器的代理,其行为类似于 Web 服务器,不同之处在于它不是在本地组合来自程序和磁盘的内容,而是将请求转发到源服务器。从客户端的角度来看,它是一个 Web 服务器,因此用户体验是完全透明的。

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


可以肯定的是,正向代理是客户端,反向代理是服务器端?
@yves。代理也是服务器。只是客户端需要本地配置才能进行通信。而反向代理需要在服务器本身进行配置。它们的物理节点都在“服务器端”。
仅作为一般信息,并非所有代理都可以作为正向和反向操作,例如,SOCKS 可以,但不是 HTTP 代理。
P
Peter Mortensen

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

https://i.stack.imgur.com/eeQP2.png

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

https://i.stack.imgur.com/zOvvx.png


我觉得我可以向后复制和粘贴您的定义,并且它们仍然是正确的。我认为这不能解释任何关键区别或澄清反向代理的“反向”是什么?
代理将始终代表某人行事(向另一方隐藏其身份)。 “反向”是指反向“隐藏”的一面,在第一种情况下是客户端(常规代理),在第二种情况下是服务器(反向代理)。事实上,这些术语可以互换使用,这只是一个约定问题,选择第一种情况作为常规代理(可能是出于历史原因)。希望这是有道理的。
P
Peter Mortensen

最好的解释是 here 的图表:

正向代理代表客户端(或请求主机),反向代理代表服务器。

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


P
Peter Mortensen

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


P
Peter Mortensen

代理(正向代理):

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

反向代理:

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

https://i.stack.imgur.com/J7PA8.jpg

图片来源:Creating a Forward Proxy Using Application Request Routing


恕我直言,最简单/最好的答案。
P
Peter Mortensen

Cloudflare 有一篇很棒的文章,其中包含详细解释这一点的图像。检查这里:什么是反向代理? |代理服务器解释

https://i.stack.imgur.com/x2jwy.png

https://i.stack.imgur.com/2ERPI.png


P
Peter Mortensen

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

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

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


P
Peter Mortensen

转发代理 授予客户匿名性(即,想想 Tor)。

反向代理授予后端服务器匿名性(即认为服务器位于 DMZ 后面)。


C
Community

据我了解...

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

转发代理

假设您要访问“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。

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


P
Peter Mortensen

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

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

应用程序服务器将网站内容返回给客户端。


P
Peter Mortensen

转发代理为用户服务:它帮助用户访问服务器。

反向代理服务于服务器:它保护服务器免受用户的侵害。


P
Peter Mortensen

如果没有代理

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

客户端 -> 服务器

代理人

从客户端:

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

从服务器端:

客户端 -> 服务器

反向代理

从客户端:

客户端 -> 服务器

从服务器端:

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

所以我觉得如果是客户端用户设置的,就叫代理;如果是服务器管理员设置的,就是反向代理。

因为设置它的目的和原因不同,它们处理数据的方式不同,使用的软件也不同。

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

如果它的图形表示但内容很好,那就更好了。@tinyhare
G
Gopinath

代理服务器(也称为正向代理)和反向代理服务器之间的区别取决于参考点。

从技术上讲,两者完全相同。两者都用于代表源将数据传输到目的地的相同目的。

区别在于“代理服务器代表谁/代理服务器代表谁?”

如果代理服务器代表最终用户将请求转发到互联网服务器(例如:大学中的学生通过大学代理服务器访问互联网。),则代理称为“转发代理”或简称为“代理”。

如果代理服务器代表服务器响应传入请求,则代理称为“反向代理”,因为从最终用户的角度来看,它是在反向工作。

反向代理的一些示例:

Web 服务器前面的负载均衡器代表实际的 Web 服务器充当反向代理。 API 网关免费网站托管服务,如(facebook 页面/博客页面服务器)也是反向代理。实际内容可能在某个 Web 服务器中,但外界通过反向代理广告的特定 url 知道它。

使用正向代理:

监控组织的所有出站互联网连接 对互联网浏览应用安全策略并阻止下载恶意内容 阻止访问特定网站

使用反向代理:

为网站提供友好的 URL 跨多个 Web 服务器执行负载平衡 应用安全策略并保护实际 Web 服务器免受攻击


P
Peter Mortensen

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

代理 - 需要两个参数:1)获取什么和 2)使用哪个代理服务器

反向代理 - 需要一个参数:1)得到什么

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


P
Peter Mortensen

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

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

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

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

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

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


“多个本地服务器到任何一个远程客户端” - 嗯,为什么不多个服务器到多个客户端?我的意思是 - 服务器本身不会连接到客户端,它只响应任何客户端请求,无论是多个客户端还是同一个客户端。
再读一遍——尤其是最后一段,试着将“任何一个远程客户端”理解为许多操作实例之一
文字还行,只是第二张图让我突然想到“咦,另一个客户去哪儿了?”当我将它与第一张图进行比较时。
是的,这是因为那个客户不是其他两个中的任何一个。开发人员倾向于以非常具体和具体的术语进行思考,因为这在您实现某些东西时会有所帮助,但是在考虑抽象时,同样的思维方式并不是很有帮助。
s
swanf

让我们考虑一下服务的目的。

在正向代理中:

代理帮助用户访问服务器。

在反向代理中:

代理帮助用户访问服务器。

在后一种情况下,被代理帮助的不再是用户,而是服务器,这就是我们称之为反向代理的原因。