「代理」描述的是一种位置,而不是某个产品:它位于连接的中间,负责转发流量。我们的术语表中关于什么是代理服务器的条目介绍了基本概念。本文再深入一层,讲解最常见的两种形态:正向代理和反向代理。两者的机制相同,但服务于连接的相反两端。
两者容易混淆,这可以理解。它们都会接收请求、转发请求,也都会隐藏某些信息。区别在于站在哪一边。正向代理代表客户端,住宅代理就是这样工作的。反向代理代表服务器,Nginx 或 CDN 在网站前端所做的正是这件事。只要弄清代理服务于哪一端,其余问题就迎刃而解。
一句话说清两者的区别
- 正向代理位于客户端前面。客户端主动选择让流量经过它,网站看到的是代理的 IP 地址,而不是客户端的。
- 反向代理位于服务器前面。客户端连接它时以为连接的就是网站,由它决定由哪台后端服务器响应。
因此,正向代理向服务器隐藏客户端,反向代理向客户端隐藏服务器。
正向代理的工作原理
正向代理在客户端一侧配置。你在浏览器、操作系统设置、脚本或抓取工具中填入它的地址,此后你的请求会先发送到代理。
- 客户端连接代理,对于大多数商业服务,还需要用用户名和密码进行身份验证。
- 访问 HTTPS 网站时,客户端请求代理建立一条通往目标的隧道。代理向外发起连接,并在不读取内容的情况下转发加密数据。
- 目标网站看到连接来自代理的 IP 地址,因此会针对该地址而不是你的地址应用位置判断、信誉评估和速率限制。
几十年来,企业一直使用正向代理来过滤和记录员工访问的网络内容。商业代理市场提供的同样是正向代理:住宅代理或 ISP 代理服务为你提供所需地区的出口 IP 地址,你访问的网站看到的就是这些地址。许多服务商会在大型 IP 池前设置一个统一网关,并在每次请求时为你选择出口,这就是反向连接(backconnect)模式。有人会用「反向轮换代理」来搜索这种服务,但它仍然是正向代理:它代表的是你,也就是客户端。
反向代理的工作原理
反向代理在服务器一侧配置,客户端通常并不知道它的存在。网站的 DNS 记录指向反向代理,因此每位访问者都会连接到它。
- 访问者的浏览器连接到它认为是网站的地址。
- 反向代理通常会终止 TLS,读取请求并决定其去向:转发到哪台后端服务器、哪个服务,或直接从缓存返回。
- 它将请求转发到选定的后端,通常会添加
X-Forwarded-For之类的请求头,使应用仍能获知访问者的真实 IP 地址。 - 它把后端的响应返回给访问者,就好像响应是它自己生成的一样。
Nginx、HAProxy、Envoy 和 Traefik 都是常见的反向代理,CDN 和 DDoS 防护服务则在全球范围内以同样的方式运作。部署反向代理的理由包括:在多台服务器之间进行负载均衡、集中管理 TLS 证书、缓存、压缩,以及提供一层防护,在攻击和恶意流量到达应用之前将其吸收和拦截。
对比一览
| 正向代理 | 反向代理 | |
|---|---|---|
| 代表的一方 | 客户端 | 服务器 |
| 由谁配置 | 用户或其所在企业 | 网站运营方 |
| 谁知道它的存在 | 客户端 | 运营方;访问者通常不知道 |
| 另一端看到的内容 | 代理的 IP,而不是客户端的 IP | 代理,而不是真实的服务器 |
| 典型软件或服务 | Squid、企业网关、住宅代理和 ISP 代理服务 | Nginx、HAProxy、Envoy、CDN、Web 应用防火墙 |
| 典型用途 | 位置测试、数据采集、访问控制、对目标网站隐藏身份 | 负载均衡、TLS、缓存、攻击防护 |
还有第三种类型,即透明代理,它无需客户端做任何配置就能拦截流量,例如酒店或学校网络中的代理。它代表的是网络运营方而不是你,也不会改变上述正向与反向的划分。
何时需要正向代理
当问题在于你自己的出站流量在其他网站眼中呈现为什么样子时,你需要正向代理:
- 你需要从另一个国家或城市的视角查看网站。 价格、搜索结果、广告和内容都会因地区而异,只有当地的 IP 地址才能让你看到本地版本。
- 你需要大规模采集公开网络数据。 将请求分散到大量住宅 IP 地址上,可以让每个地址都保持在网站按 IP 设定的速率限制之内。
- 你管理的账户需要保持固定位置。 这种情况适合 ISP 代理模式:在整个计费周期内,每个代理都保持在你选择的城市和 ISP 上,而你的用户名保持不变。
- 你的企业需要管控出站访问。 企业正向代理负责执行访问策略,并记录离开网络的流量。
选择协议与选择代理类型是两个不同的问题;我们的 HTTP 与 SOCKS5 代理对比指南对此有详细介绍。
何时需要反向代理
当问题在于入站流量如何到达你自己的服务器时,你需要反向代理:
- 你运行不止一台后端服务器,需要分摊负载,并在其中一台宕机时保持服务可用。
- 你希望在一个地方统一处理 TLS、重定向、压缩和缓存。
- 你希望在请求到达应用之前,就抵御流量洪泛和恶意机器人。
- 你希望在同一个域名下对外提供多个内部服务,例如
/api和/app。
如果你只是运营一个网站,你需要的是反向代理,而不是正向代理,而且托管服务商或 CDN 往往已经替你运行了反向代理。
何时两者都需要
很多企业同时运行两者,分别处理不同方向的流量。例如,一个价格情报团队会通过其关注市场的正向代理发送出站采集请求,同时在客户使用的仪表板和 API 前部署反向代理。
你通过正向代理发出的每一个请求,也都会与反向代理相遇。大多数大型网站都位于反向代理或 CDN 之后,由它在应用接触访问者之前对其进行检查。正是这一边缘层在评判你的正向代理:其 IP 地址的信誉和类型、来自该地址的请求数量,以及连接是否像真实浏览器。这就是为什么出口 IP 比代理软件更重要,也是为什么来自数据中心网段的请求比来自家庭网络的请求更容易遭到验证拦截。
常见问题
VPN 是正向代理吗?
它的作用类似,因为它代表客户端,并向网站隐藏客户端的 IP 地址。VPN 通常在网络层承载设备的全部流量,而正向代理是按应用或按请求设置的。
负载均衡器是反向代理吗?
大多数工作在 HTTP 层的负载均衡器都是反向代理:它们接受客户端的连接,并选择一个后端进行转发。有些负载均衡器工作在更底层,只负责路由数据包,属于另一类工具。
一台服务器能同时充当正向代理和反向代理吗?
可以。Nginx 或 Squid 等软件可以配置为任意一种,有些部署同时承担两种角色。角色取决于配置以及代理处理的是谁的流量,而不取决于软件本身。
住宅代理是正向代理还是反向代理?
是正向代理。你在客户端中配置它,它代表你行事,你访问的网站看到的是住宅出口 IP 地址,而不是你的地址。
总结
问一问代理站在哪一边。如果它代表你面对你访问的网站,它就是正向代理,关键在于它提供的 IP 地址。如果它代表网站面对访问者,它就是反向代理,关注的是负载、安全和速度。大多数从网络采集数据的团队需要前者,而大多数运营网站的团队已经拥有后者。Shifter 的正向代理可在 shifter.io/order 免费试用,你可以先在自己关心的网站上测试,再选择套餐。