HTTP 正向代理与反向代理

正向代理、反向代理与 MITM:从网络请求流向看清三者本质

在做网关、代理、抓包、甚至 LLM Proxy 的时候,经常会遇到三个概念:

  • 正向代理(Forward Proxy)
  • 反向代理(Reverse Proxy)
  • MITM(Man-in-the-Middle,中间人攻击/中间人代理)

我们其实只要抓住一个核心问题:

请求到底是谁发起的?又是谁在“替谁”说话?

把这个关系理清楚,这三者基本就能理解了。


一、先从一条最普通的 HTTP 请求开始

没有任何代理时,请求是这样的:

1
浏览器  →  目标服务器(example.com)

过程很直接:

  1. DNS 解析
  2. 建立 TCP/TLS
  3. 发送 HTTP 请求
  4. 返回响应

客户端知道服务器是谁,服务器也知道客户端是谁。


二、正向代理(Forward Proxy)

1. 结构变化

正向代理的本质是:

客户端不直接访问目标服务器,而是先访问代理,由代理替它去访问外部世界。

结构变成:

1
客户端 → 正向代理 → 目标服务器

2. 请求流程

假设访问 google.com:

Step 1:客户端请求代理

1
2
GET http://google.com
Host: google.com

客户端其实只知道:

1
2
我要访问 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
2
GET /api/user
Host: api.example.com

客户端只知道一个域名。


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
2
客户端 ←TLS→ MITM
MITM ←TLS→ 服务器

Step 4:解密与转发

MITM 可以:

  • 看到明文 HTTP
  • 修改请求
  • 修改响应
  • 记录数据

4. MITM 常见用途

(1)抓包调试

工具:

  • Charles
  • Fiddler
  • mitmproxy

(2)安全测试

1
Burp Suite

用于:

  • SQL 注入测试
  • XSS 测试
  • 请求篡改

(3)企业审计

公司可能用:

  • HTTPS 解密网关
  • 安全代理

五、三者对比(核心一张表)

类型 代理谁 谁知道代理存在 隐藏谁 典型用途
正向代理 客户端 客户端知道 客户端 翻墙、抓包
反向代理 服务器 客户端不知道 服务器结构 负载均衡
MITM 双向流量 通常双方都“不知道” 双方通信内容 抓包、审计

六、总结一句话

如果只记一句话:

正向代理是“替客户端出去”,反向代理是“替服务器接客”,MITM 是“把中间那条线拆开看内容”。