正向代理和反向代理有什么区别?
简化版
区别在代理站在谁那边、替谁转发。正向代理站在客户端这边,替客户端去访问服务器,服务器不知道真实客户端是谁(如科学上网、公司统一出口)。反向代理站在服务器这边,替服务器接收客户端请求再转发给后端,客户端不知道真实服务器是谁(如 Nginx,做负载均衡、缓存、SSL 卸载)。简单概括:正向代理隐藏客户端,反向代理隐藏服务器。
详细版
| 维度 | 正向代理 | 反向代理 |
|---|---|---|
| 代理位置 | 客户端一侧 | 服务器一侧 |
| 代理谁 | 替客户端发请求 | 替服务器收请求 |
| 谁知情 | 客户端主动配置、知道有代理 | 客户端无感,以为直接访问服务器 |
| 隐藏谁 | 隐藏客户端(服务器看不到真实客户端) | 隐藏服务器(客户端看不到真实后端) |
| 典型用途 | 科学上网、公司统一出口、访问控制、缓存 | 负载均衡、缓存、SSL 卸载、安全防护、动静分离 |
| 代表 | 各类代理软件、公司代理服务器 | Nginx、HAProxy、CDN |
正向代理: 客户端 → [正向代理] → 服务器 (代理替客户端出面)
反向代理: 客户端 → [反向代理] → 后端服务器 (代理替服务器出面)
完整版教学
一、核心区别:代理替谁「出面」
两种代理都是「中间转发」,区别在于它站在哪一边、替谁出面:
- 正向代理替客户端出面。客户端主动把请求发给代理,代理再去访问目标服务器。服务器看到的是代理的 IP,不知道真实客户端是谁。所以正向代理隐藏了客户端。
- 反向代理替服务器出面。客户端以为自己直接访问的就是服务器,其实访问的是反向代理,代理再把请求转发给背后真正的后端。客户端不知道背后有多少台服务器、具体是哪台。所以反向代理隐藏了服务器。
判断口诀:看代理离谁近、替谁挡在前面——离客户端近、替客户端访问就是正向;离服务器近、替服务器接客就是反向。
二、正向代理:客户端的「代言人」
正向代理需要客户端主动配置(知道自己在用代理)。典型用途:
- 突破访问限制:客户端连不上某服务器,通过能连上的代理中转(科学上网就是这个原理);
- 统一出口 / 访问控制:公司让所有员工上网都走一台代理,便于审计、过滤、限制访问的网站;
- 隐藏客户端身份:服务器只看到代理 IP,看不到真实客户端;
- 缓存:代理缓存常访问的内容,多个客户端共享。
关键词:客户端主动用、代理替客户端访问、对服务器隐藏客户端。
三、反向代理:服务器集群的「门面」
反向代理对客户端透明(客户端无感,以为直连服务器)。它是现代 Web 架构的标配(Nginx 最典型),用途丰富:
- 负载均衡:把请求分发到后端多台服务器(详见「负载均衡方式」那道题);
- 缓存:缓存后端响应,减轻后端压力;
- SSL 卸载:在反向代理层统一做 HTTPS 加解密,后端服务用 HTTP,省后端算力;
- 安全防护:隐藏后端真实 IP、拦截恶意请求、限流;
- 动静分离:静态资源代理直接返回,动态请求转发给后端应用。
关键词:客户端无感、代理替服务器接客、对客户端隐藏后端。
四、一个形象的类比
- 正向代理像代购:你(客户端)不方便直接买,委托代购(代理)替你去店里(服务器)买,店家只知道代购、不知道你是谁。
- 反向代理像前台/总机:你打电话给公司(服务器),先接通的是前台(反向代理),前台再转接到具体的员工(后端),你不知道也不关心背后是哪个员工接的。
五、常见误区
- ❌ 把两者搞反——正向代理替客户端、隐藏客户端;反向代理替服务器、隐藏服务器。
- ❌ 以为客户端能感知反向代理——反向代理对客户端透明,客户端以为直连服务器。
- ❌ 以为正向代理不用配置——正向代理通常要客户端主动配置才生效。
- ❌ 以为 Nginx 只能做反向代理——它主要做反向代理,但也能配成正向代理(少见)。
六、常见误区与追问
| 考点 | 正确口径 |
|---|---|
| 正向代理 | 代理客户端访问外部服务,服务端不一定知道真实客户端 |
| 反向代理 | 代理服务端接收外部请求,客户端不一定知道真实后端 |
| 典型能力 | 访问控制、缓存、负载均衡、TLS 终止、隐藏拓扑 |
forward proxy: client -> proxy -> internet
reverse proxy: client -> proxy -> backend pool
Nginx/LB often acts as reverse proxy
判断正反代理,别看软件名,看它站在谁的前面:替客户端出去是正向,替服务端接客是反向。
- 误区:Nginx 一定是反向代理。 Nginx 常做反向代理,但代理类型取决于部署位置和服务对象。
- 误区:正向代理只用于翻墙。 企业出口审计、缓存、访问控制、匿名访问也属于正向代理场景。
- 误区:反向代理只是转发请求。 它还能做负载均衡、TLS 终止、限流、压缩、缓存和故障摘除。
- 追问:反向代理为什么能隐藏后端? 客户端只连接代理地址,真实后端 IP、端口和数量不直接暴露。
- 追问:代理如何传递真实客户端 IP? 常用
X-Forwarded-For或Forwarded头,但后端必须只信任可信代理写入的值。 - 追问:负载均衡和反向代理是什么关系? 负载均衡常由反向代理实现,但反向代理还包含缓存、路由、安全等更多能力。
七、加强记忆
正向代理站在客户端一侧、替客户端访问服务器、对服务器隐藏客户端(科学上网、公司统一出口,客户端要主动配置);反向代理站在服务器一侧、替服务器接收请求转发给后端、对客户端隐藏服务器(Nginx 做负载均衡/缓存/SSL 卸载,客户端无感)。核心区别:正向隐藏客户端、反向隐藏服务器——看代理替谁出面。