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

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

600587 次浏览

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

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

因此用户无法判断是否涉及代理…

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

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

功能齐全的服务器通常具有权限改造、缓存和一些链接映射功能。

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

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

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

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

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

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

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

FORWARD代理

大多数关于Web代理的讨论都涉及称为“前向代理”的代理类型。

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

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

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

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

通常,一个会直接从X --> Z.连接

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

X想要使用前向代理服务器的原因:

以下是前向代理服务器使用的(非常)部分列表:

反向代理

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

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

  • 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认为他只与YX --> Y)通信,但现实是Y转发所有通信(X --> Y --> Z再次)。

Z想要设置反向代理服务器的原因:

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

链接到帖子中的主题:

内容分发网络

前向代理软件(服务器端)

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

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

另见:

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

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

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

一对简单的定义是:

Forward Proxy:代表请求者(或服务使用者)行事

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

根据我的理解……

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

前向代理

假设您想访问“Google”,而“Google”反过来将有n个服务器来响应该特定请求。

在这种情况下,当您向Google请求某些内容并且不希望Google看到您的IP地址时,您将使用前向代理,如下所述。

A→B→C

现在你是A,通过B发送请求。所以C会认为请求来自B,而不是A。通过这种方式,你可以防止你的客户端IP地址不暴露在外部世界。

反向代理

现在在这种情况下,为了让你明白,我们将采用相同的前向代理案例。在这里,你向谷歌请求了一些东西,谷歌反过来会将一个请求发送到应用服务器或另一个代理服务器以获得响应。所以这些事情会发生,如下所述。

A→B→C

C→D

C←D

A←B←C

从上图中,您可以看到一个请求是从B发送到C的,而不是从A。然后从C会有一个请求发送到D。同样,响应会从D发送到C,然后再发送到B和A。

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

正向代理与反向代理(2012)非常清楚地解释了前向代理和反向代理之间的区别。

qyb2zm302的答案很好地详细描述了代理的应用程序,但它忽略了前向代理和反向代理之间的基本概念。对于反向代理,X→Y→Z,X知道Y而不知道Z,而不是相反。

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

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

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

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

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

在我看来,向前反向只是客户端服务器代理的混淆、透视依赖的名称。我建议放弃前者,转而使用后者,进行显式通信。

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

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

前向代理

转发代理

反向代理

反向代理

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

在此处输入图片描述

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

在此处输入图片描述

最好的解释是这里与图表:

虽然前向代理代理代表客户端或请求主机,但反向代理代理代表服务器。

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

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

正向代理vs反向代理

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

图片来源:quora。然而,根据Martijn Pieters,这张照片可能来自脉冲安全社区或Julien Pauli的网站(法语),developpez.com.

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

一张图片胜过千言万语。

前向代理授予客户端匿名性(即,想想Tor)。

反向代理授予后端服务器匿名性(即,想想DMZ背后的服务器)。

代理(转发代理):

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

反向代理:

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

在此处输入图片描述

图片来源:使用应用程序请求路由创建前向代理

如果没有代理

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

客户端->服务器端

代理

从客户端:

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

从服务器端:

客户端->服务器端

反向代理

从客户端:

客户端->服务器端

从服务器端:

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

所以我认为如果它由客户端用户设置,它被称为代理;如果它由服务器管理器设置,它是反向代理。

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

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

Cloudflare有一篇很棒的文章,其中详细解释了这一点。

点击这里:什么是反向代理?|代理服务器解释

在此处输入图片描述


在此处输入图片描述

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

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

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

  • 代理-需要两个参数

    1)获取什么和2)哪个代理服务器使用中间

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

    1)得到什么

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

前面的大多数答案都是好的,但在我看来,没有一个答案能够很好地解决区分两者的“反向”性质。要做到这一点,需要给出某种可视化本质上相同的东西(代理)的“反向”性质的方法,并且需要以一种很好的抽象方式给出。

代理(隐式“前向代理”)将多个本地客户端连接到任何一个远程服务器:

c--|--p--sc--

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

s--|--p--cs--

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

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

前向代理:

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

反向代理:

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

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

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

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

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

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

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

反向代理的一些示例:

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

使用前向代理:

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

反向代理的使用:

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