正向代理和反向代理的区别

95 阅读2分钟

正向代理 vs 反向代理

对比维度正向代理反向代理
定义客户端的代理,代表客户端访问外部服务。服务端的代理,代表服务器接收并分发客户端请求。
隐藏对象隐藏客户端身份(服务端不知道真实请求来源)。隐藏服务端细节(客户端不知道真实处理请求的服务器)。
客户端是否感知客户端需主动配置代理(如浏览器设置代理服务器)。客户端无感知,直接访问反向代理地址(如访问网站域名)。
典型应用场景突破访问限制(如访问外网)、匿名请求、爬虫代理IP。负载均衡、安全防护(如防火墙)、缓存加速、统一入口。
部署位置客户端网络或独立代理服务器(如公司内网代理)。服务端网络,位于实际服务器之前(如云服务器前端)。
常见工具Shadowsocks、Charles、Fiddler、VPN。Nginx、Apache Traffic Server、HAProxy。

核心区别图示

客户端 --> 正向代理 --> 互联网  
(代理代表客户端)

客户端 --> 反向代理 --> 内部服务器集群  
(代理代表服务端)

场景示例

1. 正向代理示例

  • 用途:公司内网用户通过代理访问外网。
  • 流程
    1. 用户配置浏览器代理为 proxy.company.com:8080
    2. 访问 https://google.com 时,请求先发送到代理服务器。
    3. 代理服务器转发请求到 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;
        }
    }
    
  • 流程
    1. 用户访问 http://example.com
    2. Nginx(反向代理)接收请求,按负载均衡策略(如轮询)转发到内部服务器(如 192.168.1.2:8000192.168.1.3:8000)。
    3. 内部服务器处理请求后,返回响应给 Nginx,再由 Nginx 返回给用户。
  • 效果:用户不知道真实处理请求的是哪台服务器。

面试回答示例

“正向代理是客户端的代理,帮助客户端访问外部服务并隐藏身份(如 VPN)。反向代理是服务端的代理,接收客户端请求并分发到内部服务器,隐藏服务器细节(如 Nginx 实现负载均衡)。两者核心区别在于代理的对象不同:正向代理代表客户端,反向代理代表服务端。”

image.png 图来自@cuggz

快速记忆口诀

正向代理藏客户端,翻墙爬虫它来干。
反向代理隐服务端,负载均衡入口拦。
一个主动配,一个无感知,对象不同是关键。