代理服务器和反向代理服务器之间的区别

1726 proxy webserver reverse-proxy terminology

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

qyb*_*302 2914

以前的答案是准确的,但也许太简洁了.我会尝试添加一些例子.

首先,"代理"一词描述了代表其他人行事的某人或某事.

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

出于可访问性的目的,我将讨论限制在Web代理中 - 但是,代理的概念不仅限于网站.

前进代理

大多数关于Web代理的讨论都是指被称为"转发代理"的代理类型.

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

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

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

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

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

但是,在某些情况下,Y --> Z代表X哪个链更好,如下:X --> Y --> Z.

X希望使用转发代理服务器的原因:

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

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

    • a)对X网络连接具有管理权限的人决定阻止对网站的所有访问Z.

      • 例子:

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

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

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

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

    • b)管理员Z已被阻止X.

      • 例子:

        • Z的管理员注意到来自X的黑客攻击尝试,因此管理员决定阻止X的IP地址(和/或netrange).

        • Z是一个论坛网站. X是垃圾论坛.Z阻挡X.

REVERSE代理

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

在本例中,我将列出连接到互联网的三台计算机.

  • X =您的计算机或互联网上的"客户端"计算机
  • 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有一个庞大的网站,数百万人希望看到,但单个网络服务器无法处理所有流量.因此,Z设置了许多服务器,并在互联网上放置了一个反向代理,当用户尝试访问Z时,会将用户发送到最靠近他们的服务器.这是内容分发网络(CDN)概念如何工作的一部分.
  • 2)Z的管理员担心对服务器上托管的内容进行报复,并且不希望将主服务器直接暴露给公众.
    • a)"加拿大药房"等垃圾邮件品牌的所有者似乎拥有数千台服务器,而实际上大多数网站托管的服务器数量要少得多.此外,有关垃圾邮件的滥用投诉只会关闭公共服务器,而不是主服务器.

在上述场景中,Z有能力选择Y.

链接到帖子的主题:

内容分发网络

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

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

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

也可以看看:

  • 这是我的关键:-正向:`(X-> Y)-> Z`,反向:`X->(Y-> Z)`。 (4认同)
  • 那么这个概念就清楚了。但问题仍然是为什么叫“反向”?在反向代理的情况下我看不到任何反向影响。我可以猜测的一个可能的原因是,在“正向代理”的情况下,代理的要求来自 X 一侧,而在“反向代理”的情况下,代理的要求来自服务器 Z 一侧。合理? (4认同)
  • 从概念上讲,我们可以将"反向代理"称为"强制"代理或将其视为"强制"代理? (2认同)
  • "这会将用户发送到离他们最近的服务器" - 重点是什么?所有流量都将通过该代理服务器,对吧?因此,它背后的"本地"服务器位置无关紧要.或者我错过了什么? (2认同)
  • @Pavel可能是"最接近他们的服务器"并不是最好的描述.更像是"将负载分配到服务器池"是更好的描述.此示例描述了反向代理负载平衡器. (2认同)

小智 520

一对简单的定义就是

转发代理:代表请求者(或服务消费者)代理

反向代理:代表服务/内容制作人代理.


Nis*_*ant 374

我发现这个图非常有用.它只显示了通过Internet从客户端到服务器的__CODE__vs __CODE__代理设置的体系结构.此图片将帮助您更好地了解qyb2zm302的帖子和其他帖子.

正向代理与反向代理

您还可以观看这个从视频中__CODE____CODE__彼得·席尔瓦.

图片来源:Quora.创建此图表的人员的所有信用.

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

一张图片价值1000字.

  • 这真的是你需要关注的全部内容.在浏览器中设置代理,以便Netflix不知道您所在的国家/地区是转发代理商; 指向传入请求的上游服务(可能您希望向两个服务器发送一个请求)是反向代理. (7认同)
  • 最后一个答案中的最佳图片.谢谢.:)反向代理也称为"负载均衡器",作用于服务器端(将负载分配给不同的服务器),而正向代理支持客户端. (6认同)
  • 转发代理也可以在互联网上 (5认同)
  • quora 作者不是该图像的原始作者,因为 [此页面来自 2013 年,仅进行了一次修订](https://community.pulsesecure.net/t5/Pulse-Secure-vADC/Using-Stingray-Traffic-Manager- as-a-Forward-Proxy/ta-p/28747) 又老了一岁。 (2认同)
  • 来源可能是[2009 年的法语教程](https://julien-pauli.developpez.com/tutoriels/web/http/?page=page_7);[2009 年网络存档副本](https://web.archive.org/web/20090801000000*/http://julien-pauli.developpez.com:80/tutoriels/web/http/?page=page_7) 具有javascript 问题(继续重定向),并且图像仅在 2017 年存档,但源引用了与后来的源相同的图像 URL。 (2认同)

Pro*_*gun 216

qyb2zm302的答案很好地详述了代理的应用程序,但在正向和反向代理之间的基本概念上滑倒了.对于反向代理,X - > Y - > Z,X知道Y而不是Z,而不是相反.

http://www.jscape.com/blog/bid/87783/Forward-Proxy-vs-Reverse-Proxy非常清楚地解释了正向和反向代理之间的区别.

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

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

    代理代表客户行事.客户了解链中涉及的所有3台机器.服务器没有.

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

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

在我看来,正向反向只是令人困惑的,客户端服务器代理的视角相关的名称.我建议放弃前者用于后者,以便进行明确的沟通.

当然,为了使问题进一步复杂化,并非每台机器都只是客户端或服务器.如果上下文中存在歧义,则最好明确指定代理所在的位置以及它所通过的通信.

  • 似乎这个比较中最相关的特征是谁知道谁.转发代理:客户端知道代理(它实际配置了它)和目标服务器(因为它向服务器的url发出请求),而在反向代理的情况下,客户端知道代理作为目标服务器(它不知道代理实际调用的是什么;它可以是一个服务器或更多服务器).使用转发代理,服务器不知道客户端到底是谁,因为代理"转发"请求.转发代理:隐藏客户端.反向代理:隐藏服务器. (6认同)
  • 这个答案符合http://httpd.apache.org/docs/2.0/mod/mod_proxy.html#forwardreverse并帮助解释清楚 (3认同)

Mar*_*ari 129

一些图可能有所帮助:

转发代理

转发代理

反向代理

反向代理

  • 是吗?它们看起来一样!重写一个使代理成为"反向"代理的响应有什么特别之处? (6认同)
  • @ 8bitjunkie它的观点.请注意,对于转发代理,客户端知道它正在与代理服务器通信.对于反向代理,客户端认为它与home.com直接通信.代理也有不同的实现.反向代理可能非常愚蠢.它所要做的就是改变地址并传递呼叫.客户端上的网络逻辑更多,代理服务器更少.另一方面,转发代理需要以某种方式知道对proxy.com()的请求需要调用service.com.客户端上的网络逻辑较少,代理上更多. (2认同)
  • “**翻译** myhome.myhosting.com 到 hom.com”是什么意思我不明白翻译部分。比如重写部分响应头之类的? (2认同)

ben*_*enc 71

差异主要在于部署.Web转发和反向代理都具有相同的底层功能,它们接受各种格式的HTTP请求请求,并通常通过访问源或联系服务器来提供响应.

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

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

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

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

这是简短版本,我可以澄清人们是否想发表评论.

  • @yves.代理也是服务器.只是客户端需要本地配置才能进行通信.反向代理需要在服务器本身进行配置.他们的物理节点都在"服务器端". (4认同)

Dim*_*mos 59

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

在此输入图像描述

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

在此输入图像描述

  • 代理将始终代表某人(将其身份隐藏在另一方)."反向"是指反转其侧面是"隐藏"的,它是第一种情况下的客户端(常规代理)和第二种情况下的服务器(反向代理).实际上,这些术语可以互换使用,只是通过选择第一个案例作为常规代理(可能是出于历史原因)的惯例问题.希望这是有道理的. (6认同)
  • 我觉得我可以向后复制和粘贴你的定义,但它们仍然是真的.我认为这不能解释任何关键差异或澄清反向代理的"反向"是什么? (5认同)

Far*_*han 41

这里用图表的最佳解释:

代理客户端(或请求主机)转发代理代理时,代表服务器的反向代理代理

实际上,虽然转发代理隐藏了客户端的身份,但反向代理隐藏了服务器的身份


Ign*_*ams 38

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


Nak*_*oto 27

Cloudflare有一篇很棒的文章,图片详细解释了这一点.

请点击此处:https: //www.cloudflare.com/learning/cdn/glossary/reverse-proxy/

在此输入图像描述


在此输入图像描述


JSO*_*C11 26

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

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

在此输入图像描述 图像来源:docs.microsoft.com

  • 恕我直言,最简单/最好的答案。 (2认同)

Chr*_*ton 11

虽然从apache的角度来看我的理解是代理意味着如果站点x代理站点y,那么x的请求返回y.

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

这样用户就无法判断是否涉及代理...


小智 10

按照我的理解..........

首先,众所周知,代理意味着"代表他人的权力".现在有两件事正向和反向代理.

FORWARD PROXY假设你想要访问"谷歌"和"谷歌"反过来将有n个服务器来响应该特定请求.

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

甲----->乙----->Ç

现在你在A通过B发送请求,所以C会认为请求来自B,而不是A.这样你就可以防止你的客户IP不暴露在外面.

反向代理.现在在这种情况下,为了让您了解我们将采用相同的转发代理案例.在这里,您已经请求了google的内容,而google又会将一个请求发送到应用服务器或其他代理服务器以获取响应.所以这些事情将如下所述发生.

甲----->乙----->Ç

__PRE__

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

上图说明了其唯一的上下文,尽管两个代理的行为方式相同,但客户端代理隐藏了客户端信息,而服务器端代理将隐藏服务器端信息.

如果您认为上述说明有误,请发表评论.


8bi*_*kie 10

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

反向代理授予后端服务器匿名性(即,考虑DMZ后面的服务器).


ae.*_*ae. 9

下面是反向代理(作为负载均衡器)的示例.

客户端浏览到website.com,它点击的服务器上运行了反向代理.反向代理恰好是英镑.Pound接收请求并将其发送到位于其后面的三个应用程序服务器之一.在这个例子中,Pound是一个负载均衡器.即.它正在平衡三个应用服务器之间的负载.应用程序服务器将网站内容提供给客户端.


Hoa*_*ell 7

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

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


Gop*_*ath 6

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

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

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

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

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

反向代理的一些示例:

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

转发代理的使用:

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

反向代理的使用:

  1. 提供网站的友好 URL
  2. 在多个 Web 服务器之间执行负载平衡
  3. 应用安全策略并保护实际 Web 服务器免受攻击


tin*_*are 5

如果没有代理

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

客户端 -> 服务器

代理

从客户端:

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

从服务器端:

客户端 -> 服务器

反向代理

从客户端:

客户端 -> 服务器

从服务器端:

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

所以我想如果它是由客户端用户设置的?它被称为代理?如果它由服务器管理器设置,则它是一个反向代理。

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

   User side          |      Server side
client  <->  proxy  <-->  reverse_proxy <-> real server
Run Code Online (Sandbox Code Playgroud)