在日常工作中,大家或多或少,肯定都接触过代理服务。咱今天就来简单聊聊代理服务器的那些事儿。
什么是代理服务器
代理服务器是一个位于客户端和服务器之间的服务器,充当请求资源的客户端和提供该资源的服务器之间的媒介(代理服务)。
比如上图中,代理服务器 Proxy 接收到 Client 的请求后将其转发给目标服务器 Server,并将 Server 返回的资源再返回给 Client,Client 与 Server 之间的通信通过 Proxy 转发了一下,Proxy 代理了 Client 的这次请求。
那为什么 Client 与 Server 之间不直接通信并进行资源交换呢?引入 Proxy 是为了解决什么问题呢?
接下来,我们将分别围绕正向代理和反向代理这两类代理服务器进行解释说明。
正向代理 (Forward Proxy)
正向代理位于客户端的前面,接收客户端的请求后, 将请求转发给客户端指定的目标服务器,并将目标服务器返回的结果返回给客户端。通常我们说的代理服务器即指正向代理。
下面,将通过一个实际的例子,拆解下正向代理的流程。如下图所示:
比如,国内客户端想要访问 google,通常我们会借助于翻墙软件(VPN),流程如下:
- 在客户端配置上 VPN 服务器的相关信息(域名/IP、端口)后
- 客户端发起的访问 google 的请求
- VPN 服务器接收后转发给 google 服务器
- 将 google 服务器返回信息发送给客户端
由以上步骤可见,正向代理的特点如下:
- 代理客户端
- 需要配置代理服务器的地址(域名/IP、端口信息)
- 客户端访问的目标服务器是明确的,如 google.com
- 代理服务器与客户端在同一个局域网内
- 对于目标服务器而言,客户端不可见。如 google 的所有请求都来源于代理服务器,并不知道真实的客户端是哪台设备
正向代理的适应用场景如下:
- 访问内部网络:比如各单位内部系统
- 访问限制网络:比如 google 等
- 隐藏真实的客户端信息,如 IP、地理位置等
常见的正向代理举例:
- vpn
反向代理 (Reverse Proxy)
反向代理相对于正向代理而言,是位于一个或多个Web 服务器前面的服务器,拦截来自客户端的请求。
如上图所示,使用反向代理,当客户端将请求发送到网站服务器时,反向代理服务器会拦截这些请求,转发给源服务器并从源服务器接收响应。通常,代理服务器在转发客户端请求时,还需要考虑源服务器的负载均衡等问题。
反向代理的特点:
- 代理服务端
- 代理服务器与源服务器在同一个局域网内
- 隐藏了真实的服务器,客户端并不知道实际提供服务的是哪个服务器
反向代理的适应用场景:
- 负载均衡,如应用与集群前的代理服务器
- 提升服务器安全性能
- 网络限制
- ……
反向代理在我们的日常工作中的应用场景就比较多了
- webpack-dev-server 的 proxy
- node 环境使用的 http-proxy
- nginx
- ……
总结
综上,代理和反向代理的区别如下:
- 正向代理代理客户端请求,隐藏真实的客户端
- 反向代理代理服务器请求,隐藏真实的服务器
参考文档: