聊聊代理服务器的那些事

1,733 阅读3分钟

在日常工作中,大家或多或少,肯定都接触过代理服务。咱今天就来简单聊聊代理服务器的那些事儿。

什么是代理服务器

代理服务器是一个位于客户端和服务器之间的服务器,充当请求资源的客户端和提供该资源的服务器之间的媒介(代理服务)。 1.png 比如上图中,代理服务器 Proxy 接收到 Client 的请求后将其转发给目标服务器 Server,并将 Server 返回的资源再返回给 Client,Client 与 Server 之间的通信通过 Proxy 转发了一下,Proxy 代理了 Client 的这次请求。

那为什么 Client 与 Server 之间不直接通信并进行资源交换呢?引入 Proxy 是为了解决什么问题呢? 接下来,我们将分别围绕正向代理反向代理这两类代理服务器进行解释说明。

正向代理 (Forward Proxy)

正向代理位于客户端的前面,接收客户端的请求后, 将请求转发给客户端指定的目标服务器,并将目标服务器返回的结果返回给客户端。通常我们说的代理服务器即指正向代理。

下面,将通过一个实际的例子,拆解下正向代理的流程。如下图所示: farword.png 比如,国内客户端想要访问 google,通常我们会借助于翻墙软件(VPN),流程如下:

  1. 在客户端配置上 VPN 服务器的相关信息(域名/IP、端口)后
  2. 客户端发起的访问 google 的请求
  3. VPN 服务器接收后转发给 google 服务器
  4. 将 google 服务器返回信息发送给客户端

由以上步骤可见,正向代理的特点如下:

  • 代理客户端
  • 需要配置代理服务器的地址(域名/IP、端口信息)
  • 客户端访问的目标服务器是明确的,如 google.com
  • 代理服务器与客户端在同一个局域网内
  • 对于目标服务器而言,客户端不可见。如 google 的所有请求都来源于代理服务器,并不知道真实的客户端是哪台设备

正向代理的适应用场景如下:

  • 访问内部网络:比如各单位内部系统
  • 访问限制网络:比如 google 等
  • 隐藏真实的客户端信息,如 IP、地理位置等

常见的正向代理举例:

  • vpn

反向代理 (Reverse Proxy) 

反向代理相对于正向代理而言,是位于一个或多个Web 服务器前面的服务器,拦截来自客户端的请求。

reverse.png

如上图所示,使用反向代理,当客户端将请求发送到网站服务器时,反向代理服务器会拦截这些请求,转发给源服务器并从源服务器接收响应。通常,代理服务器在转发客户端请求时,还需要考虑源服务器的负载均衡等问题。

反向代理的特点:

  • 代理服务端
  • 代理服务器与源服务器在同一个局域网内
  • 隐藏了真实的服务器,客户端并不知道实际提供服务的是哪个服务器

反向代理的适应用场景:

  • 负载均衡,如应用与集群前的代理服务器
  • 提升服务器安全性能
  • 网络限制
  • ……

反向代理在我们的日常工作中的应用场景就比较多了

  • webpack-dev-server 的 proxy
  • node 环境使用的 http-proxy
  • nginx
  • ……

总结

综上,代理和反向代理的区别如下:

  • 正向代理代理客户端请求,隐藏真实的客户端
  • 反向代理代理服务器请求,隐藏真实的服务器

参考文档: