关于Web服务器:代理服务器和反向代理服务器的区别

Difference between proxy server and reverse proxy server

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


以前的答案是准确的,但也许过于简洁。我将尝试添加一些示例。好的。

首先,"代理"一词描述的是代表他人行事的人或事物。好的。

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

为了便于访问,我将把讨论限制在Web代理上——但是,代理的概念并不局限于网站。好的。前向代理

大多数关于Web代理的讨论都涉及到称为"转发代理"的代理类型。好的。

在这种情况下,代理事件是"转发代理"代表原始请求者从另一个网站检索数据。好的。三台计算机的故事(上)

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

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

通常情况下,一个可以直接从X --> Z.连接。好的。

但是,在某些情况下,代表XY --> Z更好,其中链如下:X --> Y --> Z。好的。X希望使用转发代理服务器的原因:

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

  • 1)X无法直接访问Z因为好的。

    • a)对X的互联网连接具有管理权限的人决定阻止所有访问站点Z。好的。

      • 实例:好的。

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

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

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

        • 政府无法控制新闻的发布,因此它通过阻止诸如wikipedia.org之类的网站来控制新闻的访问。参见Tor或Freenet。好的。

    • b)Z管理员已封锁X。好的。

      • 实例:好的。

        • z的管理员注意到来自x的黑客企图,所以管理员决定阻止x的IP地址(和/或NetRange)。好的。

        • Z是一个论坛网站。X正在向论坛发垃圾邮件。Z块X。好的。

反向代理三台计算机的故事(下)

对于这个例子,我将列出三台连接到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认为他只与Y进行通信(X --> Y),但实际情况是Y再次转发所有通信(X --> Y --> Z)。好的。Z希望设置反向代理服务器的原因:

  • 1)Z想要强制所有到其网站的流量首先通过Y。
    • a)z有一个数百万人想要看到的大型网站,但是单个Web服务器无法处理所有流量。因此,z设置了许多服务器,并在Internet上放置了一个反向代理,当用户试图访问z时,它会将用户发送到离他们最近的服务器。这是内容分发网络(cdn)概念的一部分。
      • 实例:
        • 苹果预告片使用Akamai
        • jquery.com使用cloudfront cdn托管其javascript文件(示例)。
        • 等。
  • 2)z管理员担心对服务器上托管的内容进行报复,不希望将主服务器直接公开。
    • a)垃圾邮件品牌(如"加拿大药房")的拥有者似乎拥有数千台服务器,而实际上大多数网站托管在的服务器要少得多。此外,有关垃圾邮件的滥用投诉只会关闭公共服务器,而不是主服务器。

在上述场景中,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

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

  • PHP代理
  • CGI代理
  • phproxy(停产)
  • 糖衣
  • 互联网审查维基:网络代理列表
  • Squid(显然,也可以作为反向代理)

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

  • Apache mod_代理(也可以作为HTTP的转发代理)
  • nginx(用于hulu.com、垃圾邮件网站等)
  • 哈格斯
  • 光照法
  • Perlbal(为LiveJournal编写)
  • 端口融合
  • 英镑
  • Varnish缓存(由FreeBSD内核专家编写)
  • 休憩

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

  • 平衡
  • 代表
  • 端口融合
  • 纯负载平衡器(网站已失效)
  • Python导演

参见:

  • 维基百科-内容交付网络
  • 维基百科-分类:反向代理
  • 维基百科-负载平衡
  • 维基百科-可扩展性

好啊。


一对简单的定义是

转发代理:代表请求者(或服务使用者)行事

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


我发现这个图表很有用。它只显示了forwardreverse代理服务器的体系结构,从客户机到服务器通过互联网进行设置。此图片将帮助您更好地理解QYB2ZM302的帖子和其他帖子。

Forward Proxy vs Reverse Proxy

你也可以观看彼得·席尔瓦从F5DevCentral的视频。

图片来源:Quora。所有的功劳都归功于创建这个图表的人。

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

A picture is worth 1000 words.


QYB2ZM302的回答很好地详细说明了代理的应用,但却忽略了正向代理和反向代理之间的基本概念。对于反向代理,x->y->z,x知道y而不是z,反之亦然。

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

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

  • 客户端代理:(client<->proxy)<->server

    代理人代表客户行事。客户知道所有3个涉及链条的机器。服务器没有。

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

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

在我看来,正向和反向只是客户机和服务器代理的混淆的、依赖透视图的名称。我建议把前者抛弃为后者,以便进行明确的沟通。

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


一些图表可能有助于:

前向代理

Forward proxy

反向代理

Reverse proxy


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

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

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

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

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

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


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

enter image description here

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

enter image description here


这里最好用图表说明:

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

实际上,前向代理隐藏客户端的标识,而反向代理隐藏服务器的标识。


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


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

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

enter image description here图片来源:docs.microsoft.com


普通的转发代理是位于客户机和源服务器之间的中间服务器。为了从源服务器获取内容,客户机向代理发送一个请求,将源服务器命名为目标,然后代理从源服务器请求内容,并将其返回给客户机。客户端必须经过特殊配置,才能使用转发代理访问其他站点。

相反,在客户机看来,反向代理(或网关)就像普通的Web服务器一样。客户机上不需要特殊配置。客户端对反向代理的名称空间中的内容进行常规请求。然后,反向代理决定将这些请求发送到何处,并像返回源一样返回内容。

反向代理的典型用法是为Internet用户提供对防火墙后面服务器的访问。反向代理还可以用于平衡多个后端服务器之间的负载,或者为速度较慢的后端服务器提供缓存。此外,反向代理可以简单地用于将多个服务器引入同一个URL空间。

有关更多信息,请访问:Apache Docs


Cloudflare has a great article with images explaining this in details.

Check here:
https://www.cloudflare.com/learning/cdn/glossary/reverse-proxy/

enter image description here

enter image description here


这本书很好地理解了正向代理和反向代理之间的区别。http://www.jscape.com/blog/bid/87783/forward-proxy-vs-reverse-proxy

正向代理隐藏客户端(用户)的标识,而反向代理隐藏服务器的标识。


转发代理允许客户匿名(即think tor)。

反向代理允许后端服务器匿名(即,DMZ背后的思想服务器)。


尽管我从Apache的角度理解,代理意味着如果站点x代理站点y,那么请求x返回y。

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

这样用户就不会知道涉及代理…


根据我的理解……

首先,正如大家都知道的,代理意味着"代表他人的权力"。现在有两种情况:正向代理和反向代理。

前向代理假设您要访问"google"和"google",那么将有n个服务器来响应特定的请求。

现在,在这种情况下,当你从Google请求一些东西,而你不希望Google看到你的IP地址时,你将使用一个转发代理,如下所述。

A -> B----- -C

现在,您通过b发送一个请求,所以c会认为该请求来自b,而不是a。通过这种方式,您可以防止您的客户IP不暴露于外部世界。

反向代理。在这种情况下,为了让您理解,我们将采用相同的转发代理。在这里,你已经向谷歌请求了一些东西,然后谷歌会将一个请求发送到应用服务器或另一个代理服务器以获得响应。所以这些事情会发生,如下所述。

A -> B----- -C

1
2
3
          C------>D

          C<------D

A—B—-C从上面的图表中,您可以看到一个请求已经从B发送到C,而不是从A。然后从C发送到D。同样,响应将从D发送到C,然后再发送到B和A。

上面的图表说明了它的唯一重要的上下文,尽管两个代理的作用方式相同,但是客户端代理正在隐藏客户端信息,而服务器端代理将隐藏服务器端信息。

如果您认为上述解释错误,请予以评论。


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

客户机搜索website.com,它所访问的服务器上运行的是反向代理。反向代理恰好是pound。Pound接受请求并将其发送到位于其后面的三个应用服务器之一。在这个例子中,pound是一个负载均衡器。也就是说,它在三个应用服务器之间平衡负载。应用服务器将网站内容提供给客户机。


如果没有代理
to see from client side and server side are the same:
Client -> Server
代理
from client side:
Client -> proxy -> Server
from Server side:
Client -> Server
反向代理
from client side:
Client -> Server
from Server side:
Client -> proxy -> Server

所以我认为如果它是由客户机用户设置的,那么它就称为代理;如果它是由服务器管理器设置的,那么它就是反向代理。

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

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

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

反向代理服务服务器:保护服务器不受用户伤害。


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

  • proxy-需要两个参数:

    <1)要获取什么和2)要使用中间服务器的代理服务器

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

    1.)要获取什么

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


上述大多数答案都是好的,但在我看来,没有一个能够很好地解决这两个问题的"逆向"质量问题。要做到这一点,需要以某种方式来可视化本质上相同事物(代理)的"反向"性质,并且需要以一种抽象的方式给出它。

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

1
2
3
c--
   |--p--s
c--

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

1
2
3
s--
   |--p--c
s--

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