正向代理 vs 反向代理
对比维度 | 正向代理 | 反向代理 |
---|---|---|
定义 | 客户端的代理,代表客户端访问外部服务。 | 服务端的代理,代表服务器接收并分发客户端请求。 |
隐藏对象 | 隐藏客户端身份(服务端不知道真实请求来源)。 | 隐藏服务端细节(客户端不知道真实处理请求的服务器)。 |
客户端是否感知 | 客户端需主动配置代理(如浏览器设置代理服务器)。 | 客户端无感知,直接访问反向代理地址(如访问网站域名)。 |
典型应用场景 | 突破访问限制(如访问外网)、匿名请求、爬虫代理IP。 | 负载均衡、安全防护(如防火墙)、缓存加速、统一入口。 |
部署位置 | 客户端网络或独立代理服务器(如公司内网代理)。 | 服务端网络,位于实际服务器之前(如云服务器前端)。 |
常见工具 | Shadowsocks、Charles、Fiddler、VPN。 | Nginx、Apache Traffic Server、HAProxy。 |
核心区别图示
客户端 --> 正向代理 --> 互联网
(代理代表客户端)
客户端 --> 反向代理 --> 内部服务器集群
(代理代表服务端)
场景示例
1. 正向代理示例
- 用途:公司内网用户通过代理访问外网。
- 流程:
- 用户配置浏览器代理为
proxy.company.com:8080
。 - 访问
https://google.com
时,请求先发送到代理服务器。 - 代理服务器转发请求到 Google,并将响应返回给用户。
- 用户配置浏览器代理为
- 效果:Google 看到的是代理服务器的 IP,而非用户真实 IP。
2. 反向代理示例
- 用途:通过 Nginx 分发请求到多个后端服务器。
- Nginx 配置:
server { listen 80; server_name example.com; location / { proxy_pass http://backend-server-group; # 转发到后端服务器组 proxy_set_header Host $host; } }
- 流程:
- 用户访问
http://example.com
。 - Nginx(反向代理)接收请求,按负载均衡策略(如轮询)转发到内部服务器(如
192.168.1.2:8000
或192.168.1.3:8000
)。 - 内部服务器处理请求后,返回响应给 Nginx,再由 Nginx 返回给用户。
- 用户访问
- 效果:用户不知道真实处理请求的是哪台服务器。
面试回答示例
“正向代理是客户端的代理,帮助客户端访问外部服务并隐藏身份(如 VPN)。反向代理是服务端的代理,接收客户端请求并分发到内部服务器,隐藏服务器细节(如 Nginx 实现负载均衡)。两者核心区别在于代理的对象不同:正向代理代表客户端,反向代理代表服务端。”
图来自@cuggz
快速记忆口诀
正向代理藏客户端,翻墙爬虫它来干。
反向代理隐服务端,负载均衡入口拦。
一个主动配,一个无感知,对象不同是关键。