# 漫谈代理

# 什么是代理

# 代理的功能

代理在互联网中的用途非常广泛,例如:

  • 缓存请求:加快网络响应速度,作用类似于 CDN;
  • 请求过滤:用于网络监管,屏蔽或允许对某些主机、网站的访问;
  • 请求转发:用于负载均衡或作为网络中继;
  • 流量管理:对进出代理的流量进行细粒度的管理,例如按百分比发布到不同的后端、超时和重试设置、熔断等;
  • 安全审计:记录和限制客户端请求,用于计费或审计;

# 代理的分类

代理的分类方式有很多,下图根据代理的位置将其划分为了两类:

forward-proxy-and-reverse-proxy

  • 前向代理(Forward Proxy):运行在客户端侧,代替客户端想服务端发送请求,例如我们日常使用的各种科学上网代理;
  • 反向代理(Reverse Proxy):代替服务端接受互联网或外部请求,然后将请求路由到对应的服务端,例如各种 Web 服务器,在这里 (opens new window) 你可以看到一个代理列表;

代理可能与客户端或服务器位于同一节点(或网络空间,如 Kubernetes 中的 Pod),也可以位于远端。

# 透明代理

另外还可以根据代理对客户端或服务端是否可见(visible)来分为透明代理和非透明代理。

下图展示了客户端(A)通过代理(B)向服务端(C)发送请求的过程。

transparent-proxy-explain

  • 非透明代理:客户端需要修改目的地址为代理服务器的地址,并使用代理协议连接代理服务器;
  • 透明代理:所谓透明代理,即客户端和服务端感知不到代理的存在,客户端无需修改目的地址,也不需要采用代理协议连接代理服务器,所有目的地址转换都是在透明代理中完成的;

# 透明代理的优点

透明代理具有以下优点:

  • 透明代理提供更高的带宽并减少传输延迟,从而提高服务质量;
  • 用户无需配置网络和主机;
  • 企业可以控制对其网络服务的访问;
  • 用户可以通过透明代理连接互联网以绕过一些监管;

# 透明代理的缺点

透明代理有以下缺点:

  • 如果透明代理配置不当,可能导致用户无法连接互联网,而对于不知情的用户来说,他们无法排查和修改透明代理中的错误;
  • 透明代理的安全性无法得到保证,因为被拦截的用户流量可能被透明代理篡改;
  • 透明代理可能缓存用户信息,导致用户隐私泄露的风险;