代理服务器和网关服务器有什么区别?

代理服务器和网关服务器有什么区别?

代理服务器在维基百科上:

代理服务器可能驻留在用户的本地计算机上,或者位于用户计算机和 Internet 上的目标服务器之间的任何点。传递未修改的请求和响应的代理服务器通常称为网关,有时也称为隧道代理。正向代理是面向 Internet 的代理,用于从各种来源(大多数情况下是 Internet 上的任何地方)检索数据。反向代理通常是一个面向内部的代理,用作前端来控制和保护对私有网络上的服务器的访问。反向代理通常还执行负载平衡、身份验证、解密和缓存等任务。

HTTP:权威指南作者:David Gourley 和 Brian Totty:

严格来讲,代理连接两个或多个使用相同协议的应用程序,而网关连接两个或多个使用不同协议的参与方。网关充当“协议转换器”,允许客户端与服务器完成交易,即使客户端和服务器使用不同的协议。

图 6-2 说明了代理和网关之间的区别:

  • 图 6-2a 中的中间设备是 HTTP 代理,因为该代理与客户端和服务器都使用 HTTP 进行通信。

  • 图 6-2b 中的中间设备是 HTTP/POP 网关,因为它将 HTTP 前端与 POP 电子邮件后端绑定在一起。网关将 Web 事务转换为适当的 POP 事务,以允许用户通过 HTTP 阅读电子邮件。基于 Web 的电子邮件程序(例如 Yahoo! Mail 和 MSN Hotmail)是 HTTP 电子邮件网关。

实际上,代理和网关之间的区别并不明显。由于浏览器和服务器实施不同版本的 HTTP,代理通常会进行一定程度的协议转换。商业代理服务器实施网关功能以支持 SSL 安全协议、SOCKS 防火墙、FTP 访问和基于 Web 的应用程序。

代理服务器和网关服务器之间的区别

网关在第一个源端连接使用相同协议的双方,无需修改;在第二个源端连接使用不同协议的双方,并进行协议转换。这两个源端对网关的定义不是互相矛盾吗?

Nginx 可以用作反向代理服务器,当代理服务器是 CGI 服务器时,根据其官方在线文档。反向代理服务器是由第一个源提供的代理服务器,它通过第二个源连接使用相同协议的两方。Nginx 使用 HTTP 与客户端通信,那么 Nginx 是否也应该使用 HTTP 与 CGI 服务器通信?

答案1

与 CGI 脚本的通信是通过通用网关接口这是一种调用约定,其中 HTTP 标头和请求的 URL 通过环境变量传递,而请求数据则通过标准输入。这是本地通信,因为 Web 服务器必须在同一台机器上将 CGI 脚本作为一个进程运行。

快速CGI是一种略微不同的情况,其中所有内容都使用流套接字和二进制协议传递给 CGI 脚本。套接字通常是 UNIX 套接字(因此是本地的),但也可以是常规 TCP/IP 连接。

答案2

与您的消息来源所述相反,代理和网关之间的区别不在于传入消息是否被转换;实际上,这两种类型的中介(转发代理)都可以转换传入消息。

主要区别解释如下§5.2.3 组件Roy Fielding 的博士论文架构风格和基于网络的软件架构的设计(重点是我的):

中介组件既充当客户端,又充当服务器,以便转发请求和响应(可能还需进行转换)。代理组件是客户端选择的中介,用于提供其他服务的接口封装、数据转换、性能增强或安全保护。网关(又称反向代理)组件是网络或原始服务器强加的中介,用于提供其他服务的接口封装,用于数据转换、性能增强或安全实施。请注意,代理和网关之间的区别在于客户端决定何时使用代理。

也有解释称§ 2.3. 中介机构Roy Fielding 和 Julian Reschke 的 RFC 7230超文本传输​​协议(HTTP/1.1):消息语法和路由(重点是我的):

HTTP 支持使用中介通过一系列连接来满足请求。HTTP 中介有三种常见形式:代理、网关和隧道。在某些情况下,单个中介可能充当原始服务器、代理、网关或隧道,根据每个请求的性质切换行为。

[…]

“代理”是一种消息转发代理,由客户选择,通常通过本地配置规则,接收某些类型的绝对 URI 的请求,并尝试通过 HTTP 接口的转换来满足这些请求。有些转换很少,例如“http”URI 的代理请求,而其他请求可能需要在完全不同的应用程序级协议之间进行转换。代理通常用于通过公共中介对组织的 HTTP 请求进行分组,以实现安全性、注释服务或共享缓存。有些代理旨在在转发选定的消息或有效负载时对其进行转换,如第 5.7.2 节所述。

“网关”(又称“反向代理”)是充当原始服务器的中介用于出站连接,但转换收到的请求并将其转发到入站的另一台或多台服务器。网关通常用于封装旧式或不受信任的信息服务,通过“加速器”缓存提高服务器性能,以及在多台机器上实现 HTTP 服务的分区或负载平衡。适用于原始服务器的所有 HTTP 要求也适用于网关的出站通信。网关使用它所需的任何协议与入站服务器通信,包括超出本规范范围的 HTTP 私有扩展。但是,希望与第三方 HTTP 服务器互操作的 HTTP 到 HTTP 网关应该符合网关入站连接上的用户代理要求。

“隧道”充当两个连接之间的盲中继,不会更改消息。一旦激活,隧道就不再被视为 HTTP 通信的一方,尽管隧道可能是由 HTTP 请求发起的。当中继连接的两端都关闭时,隧道将不复存在。隧道用于通过中介扩展虚拟连接,例如当使用传输层安全性 (TLS,[RFC5246]) 通过共享防火墙代理建立机密通信时。

换句话说:

  • A代理人是客户知晓其中介性质的中介;
  • A网关(也称为反向代理)是指客户不知道其中介性质的中介人。

相关内容