代理服务器和反向代理服务器之间的区别是什么?


当前回答

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

proxy-需要两个参数:1)要获取什么,以及2)要使用哪个代理服务器反向代理-需要一个参数:1)获取什么

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

其他回答

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

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

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

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

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

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

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

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

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

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

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

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

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

反向代理的一些示例:

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

转发代理的使用:

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

使用反向代理:

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

如果没有代理

从客户端和服务器端看是相同的:

客户端->服务器

代理

从客户端:

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

从服务器端:

客户端->服务器

反向代理

从客户端:

客户端->服务器

从服务器端:

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

所以我认为,如果它是由客户端用户设置的,它就叫做代理如果它由服务器管理器设置,则它是反向代理。

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

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

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

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

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

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

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

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

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

在我看来,正向和反向只是客户端和服务器代理的混淆、依赖于透视的名称。我建议放弃前者,改用后者,进行明确的沟通。

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