这是网络面试和实际开发中非常常见的问题,下面我会用通俗语言 + 对比 + 图示 + 示例来说明:
客户端找不到服务器,就找代理帮忙访问,这叫正向代理。
正向代理是客户端的代理,客户端通过代理服务器访问目标服务器,服务器并不知道真正的客户端是谁。
[客户端] → [正向代理服务器] → [目标服务器]
↑
知道客户端是谁
VPN / Shadowsocks / Clash
curl 设置代理:
curl -x http://127.0.0.1:7890 http://www.google.com服务器不直接对外暴露,而是由代理统一对外服务,这叫反向代理。
反向代理是服务器端的代理,客户端访问代理服务器,由代理服务器决定将请求转发到哪个后端服务器。客户端不感知后端结构。
[客户端] → [反向代理服务器] → [多个真实后端服务器]
↑
客户端不知道具体是哪个
Nginx / Apache / HAProxy 做反向代理
CDN(Cloudflare、阿里云 CDN)帮你隐藏源站
示例 Nginx 配置:
location /api/ {
proxy_pass http://backend_server;
}| 特性 | 正向代理 | 反向代理 |
|---|---|---|
| 代理对象 | 客户端 | 服务器 |
| 客户端是否知道目标服务器 | ✅ 是 | ✅ 是 |
| 服务器是否知道客户端 | ❌ 否 | ✅ 是 |
| 应用方向 | 客户端突破访问限制 | 服务器架构优化、安全加速 |
| 常见用途 | 翻墙、内网访问公网、爬虫 | 负载均衡、隐藏服务、CDN 加速 |
正向代理是“用户找不到服务器”,通过代理访问目标;反向代理是“服务器不直接暴露”,代理接收请求并转发到后端。
正向代理隐藏的是客户端身份,反向代理隐藏的是服务器身份。