正向代理和反向代理
代理(Proxy)是位于客户端与目标服务器之间的中间层,代表一方与另一方通信。根据代理所“代表”的对象不同,分为正向代理和反向代理。
正向代理(Forward Proxy)
正向代理代表客户端向目标服务器发起请求。客户端明确配置代理地址,所有出站请求先发到代理,由代理再转发到目标服务器;目标服务器看到的是代理的 IP,不知道真实客户端是谁。
典型场景
- 科学上网 / 翻墙:客户端配置境外代理,由代理访问被墙网站并返回结果。
- 内网访问外网:企业统一出口代理,便于审计、缓存和访问控制。
- 隐藏客户端身份:爬虫、匿名访问时,目标站点只看到代理 IP。
- 缓存与加速:代理缓存常用资源,减少重复请求。
架构示意
要点:客户端知道代理存在,并主动把流量交给代理;服务器不知道真实客户端,只看到代理。
常见实现
- 本地/浏览器:配置 HTTP/HTTPS 代理(如
http://127.0.0.1:7890)。 - 软件:Shadowsocks、V2Ray、Clash 等(应用层或隧道代理)。
- 服务端:Squid、CCProxy 等正向代理服务器。
反向代理(Reverse Proxy)
反向代理代表服务端接收请求。客户端以为自己在直接访问目标站点,实际上请求先到反向代理,由代理再转发到后端的真实服务器(可能多台);客户端不知道后端有几台机器、是谁在真正处理请求。
典型场景
- 负载均衡:把请求分发到多台后端服务器,提高可用性和性能。
- 隐藏后端架构:只暴露代理的域名和端口,内网服务器不直接对外。
- SSL 终结:在代理层做 HTTPS 解密,后端走 HTTP,简化证书与加解密管理。
- 缓存与压缩:在入口统一做静态资源缓存、Gzip 等。
- 灰度与路由:按域名、路径、Header 将流量导到不同后端或版本。
架构示意
要点:客户端不知道反向代理后面有多台服务器,只认代理的地址;后端服务器通常不知道真实客户端 IP(除非代理通过 Header 传递)。
常见实现
- Nginx:
proxy_pass做反向代理与负载均衡。 - Caddy:自动 HTTPS + 反向代理。
- HAProxy:四层/七层负载均衡。
- 云厂商:ALB、CLB、API 网关等。
对比小结
| 维度 | 正向代理 | 反向代理 |
|---|---|---|
| 代表谁 | 代表客户端 | 代表服务端 |
| 谁配置代理 | 客户端(浏览器/系统/应用) | 服务端(运维在代理服务器上配置) |
| 客户端感知 | 知道在用代理 | 以为直连目标站点 |
| 服务器感知 | 只看到代理 IP,不知真实客户 | 多台后端,由代理统一对外 |
| 典型用途 | 翻墙、匿名、统一出口、缓存 | 负载均衡、隐藏后端、SSL、缓存 |
记忆方式:正向代理“正向”站在客户端这边替你去访问;反向代理“反向”站在服务器这边替你接待来访者。
