09 · 代理 / 反向代理 / API 网关
前端配置过 vite proxy,后端常听说 Nginx 反向代理、API 网关。三者什么关系、各自解决什么,是前后端协作时最容易各说各话的概念。本篇用一张请求流图讲清。
速览卡
| 项 | 内容 |
|---|---|
| 一句话定位 | 代理层三种形态的分工与配置直觉 |
| 核心内容 | 正向/反向代理、网关职责、路径转发、常见配置 |
| 读完能回答 | 正向代理和反向代理差在哪?网关到底管什么? |
| 相关板块 | N04 HTTP | N10 负载均衡 | C05 服务架构 |
一、一张图分清三个角色
text
客户端 → [正向代理] → 公网 (替客户端转发,如科学上网、抓包)
公网 → [反向代理] → 后端集群 (替服务端接客,如 Nginx)
客户端 → [API 网关] → 多个微服务 (入口的统一治理层)| 角色 | 代表谁 | 解决什么 |
|---|---|---|
| 正向代理 | 客户端 | 隐藏客户端、访问受限资源、抓包 |
| 反向代理 | 服务端 | 隐藏后端、负载均衡、TLS 终结 |
| API 网关 | 微服务入口 | 鉴权、限流、路由、聚合、灰度 |
二、正向代理 vs 反向代理
| 对比 | 正向 | 反向 |
|---|---|---|
| 站在谁那边 | 客户端 | 服务端 |
| 客户端知道后端吗 | 不需要(代理替它去) | 不需要(只认识代理) |
| 典型例子 | Charles、企业代理 | Nginx 到应用集群 |
记忆点:"正/反"以服务对象区分:正向服务客户端,反向服务服务端。
三、反向代理在做什么
text
请求进来 → 匹配路径/域名 → 转发到上游 → 拿响应回传常见职责:静态资源托管、TLS 终结、路径路由、负载均衡、超时与重试、日志。
四、API 网关 vs 反向代理
| 能力 | 反向代理 | API 网关 |
|---|---|---|
| 路由转发 | ✅ | ✅ |
| 鉴权/限流/配额 | 弱 | ✅ 强 |
| 协议转换 | 弱 | ✅(HTTP↔gRPC、聚合) |
| 灰度/熔断 | 有限 | ✅ |
| 适用规模 | 单体/少量服务 | 微服务多团队 |
心智模型:网关是"带治理能力的反向代理"——不只是转发,还替上游做横切。
五、前后端视角的常见配置
text
# 开发环境(vite)
server.proxy: { '/api': { target: 'http://localhost:8080', rewrite } }
# 生产(Nginx)
location /api/ { proxy_pass http://backend_upstream; }注意:
proxy_pass有无末尾斜杠会导致路径拼接差异,是高频坑;跨域与 Cookie 也常在代理层配合处理。
六、自检清单
- [ ] 能用一张图分清正向/反向/网关
- [ ] 能说出三者的服务对象与典型场景
- [ ] 知道网关在微服务里管哪些横切职责
- [ ] 能看懂 Nginx / vite 的路径转发配置
- [ ] 知道代理层可能引入超时、Cookie、路径坑
七、常见误区
| 误区 | 事实 |
|---|---|
| "代理就是 Nginx" | 正向代理(如抓包工具)与反向代理是两回事 |
| "网关只是高级代理" | 网关还做鉴权、限流、协议转换与治理 |
| "配好代理就解决跨域" | 还涉及 Cookie、路径、上游超时 |
八、动手练习
练习 A:配一次反向代理
本地用 Nginx 或 Caddy 把 /api 转发到本地服务,验证路径与响应。
练习 B:看正向代理抓包
用 Charles / Fiddler 开代理,观察 HTTPS 请求被解密的原理(需安装证书)。
练习 C:对比网关配置
读一个网关(Kong / APISIX)的路由 + 限流示例,写出与 Nginx 配置的差异点。
相关文档
本区
- 04 · HTTP 与 HTTPS 深入 —— 代理层处理的请求语义
- 10 · CDN 与负载均衡 —— 上游集群调度
其他域
- 服务架构:分层/微服务/网关/熔断限流 —— 网关在架构中的位置
- 部署与 CI/CD:Docker 到云端 —— 生产环境的代理与容器