HTTP 正向代理与反向代理
正向代理、反向代理与 MITM:从网络请求流向看清三者本质
在做网关、代理、抓包、甚至 LLM Proxy 的时候,经常会遇到三个概念:
- 正向代理(Forward Proxy)
- 反向代理(Reverse Proxy)
- MITM(Man-in-the-Middle,中间人攻击/中间人代理)
我们其实只要抓住一个核心问题:
请求到底是谁发起的?又是谁在“替谁”说话?
把这个关系理清楚,这三者基本就能理解了。
一、先从一条最普通的 HTTP 请求开始
没有任何代理时,请求是这样的:
1 | 浏览器 → 目标服务器(example.com) |
过程很直接:
- DNS 解析
- 建立 TCP/TLS
- 发送 HTTP 请求
- 返回响应
客户端知道服务器是谁,服务器也知道客户端是谁。
二、正向代理(Forward Proxy)
1. 结构变化
正向代理的本质是:
客户端不直接访问目标服务器,而是先访问代理,由代理替它去访问外部世界。
结构变成:
1 | 客户端 → 正向代理 → 目标服务器 |
2. 请求流程
假设访问 google.com:
Step 1:客户端请求代理
1 | GET http://google.com |
客户端其实只知道:
1 | 我要访问 google.com |
Step 2:代理代为请求
1 | 正向代理 → google.com |
代理拿到请求后:
- 解析目标地址
- 发起真实请求
- 拿到响应
Step 3:返回结果
1 | google.com → 正向代理 → 客户端 |
3. 关键特征
正向代理的关键点:
- 客户端“知道”代理存在
- 目标服务器“不知道”客户端真实身份
- 代理隐藏的是客户端
4. 常见用途
(1)科学上网
1 | 浏览器 → Clash/V2Ray → Google |
(2)公司网络出口控制
1 | 员工电脑 → 企业代理 → 外网 |
可以做到:
- 上网审计
- URL过滤
- 流量缓存
(3)开发环境调试
比如:
- Charles
- Fiddler
- Burp Suite(基础模式)
三、反向代理(Reverse Proxy)
1. 结构变化
反向代理刚好相反:
客户端不知道真实服务器是谁,只访问代理,由代理决定转发到哪台后端。
结构:
1 | 客户端 → 反向代理 → 真实服务器 |
2. 请求流程
访问 api.example.com:
Step 1:客户端访问统一入口
1 | GET /api/user |
客户端只知道一个域名。
Step 2:反向代理分发请求
反向代理(如 Nginx):
1 | /api/user → 10.0.0.1:8080 |
或者:
1 | /api/user → 10.0.0.2:8080 |
Step 3:后端返回
1 | 后端服务 → Nginx → 客户端 |
3. 关键特征
反向代理的核心:
- 客户端不知道后端真实结构
- 代理隐藏的是服务器
- 服务器对外是“统一入口”
4. 常见用途
(1)负载均衡
1 | Nginx → 多台后端服务 |
(2)统一入口网关
1 | api.example.com |
背后可能是:
- 用户服务
- 订单服务
- 支付服务
(3)SSL 终止
1 | HTTPS → Nginx → HTTP 后端 |
(4)微服务网关
如:
- Kong
- Traefik
- APISIX
四、MITM(中间人)
MITM 不是“代理类型”,而是一种流量劫持方式。
它可以用来实现正向代理,也可以用来做调试工具。
1. MITM 的本质
MITM 的结构是:
1 | 客户端 ↔ MITM ↔ 目标服务器 |
关键点:
MITM 不是简单转发,而是解密 + 读取 + 重新加密
2. HTTPS 下的 MITM 如何实现
以 HTTPS 为例:
正常流程:
1 | 客户端 ←TLS→ 服务器 |
MITM 要做到:
1 | 客户端 ←TLS→ MITM ←TLS→ 服务器 |
3. MITM 工作流程(重点)
Step 1:伪造证书
MITM 会生成:
1 | example.com 伪造证书 |
Step 2:客户端信任根证书
关键前提:
客户端安装了 MITM 的 Root CA
例如:
- Charles 安装证书
- Burp 安装证书
Step 3:建立两条 TLS
1 | 客户端 ←TLS→ MITM |
Step 4:解密与转发
MITM 可以:
- 看到明文 HTTP
- 修改请求
- 修改响应
- 记录数据
4. MITM 常见用途
(1)抓包调试
工具:
- Charles
- Fiddler
- mitmproxy
(2)安全测试
1 | Burp Suite |
用于:
- SQL 注入测试
- XSS 测试
- 请求篡改
(3)企业审计
公司可能用:
- HTTPS 解密网关
- 安全代理
五、三者对比(核心一张表)
| 类型 | 代理谁 | 谁知道代理存在 | 隐藏谁 | 典型用途 |
|---|---|---|---|---|
| 正向代理 | 客户端 | 客户端知道 | 客户端 | 翻墙、抓包 |
| 反向代理 | 服务器 | 客户端不知道 | 服务器结构 | 负载均衡 |
| MITM | 双向流量 | 通常双方都“不知道” | 双方通信内容 | 抓包、审计 |
六、总结一句话
如果只记一句话:
正向代理是“替客户端出去”,反向代理是“替服务器接客”,MITM 是“把中间那条线拆开看内容”。