介绍
反向代理是部署在 服务端一侧 的中间服务,接收客户端的请求,代为把请求转发给后端真实业务服务器,拿到后端返回结果后,再把响应传回客户端。
工作流程
- 用户浏览器/APP发起网络请求,目标地址是反向代理服务器(域名、公网IP)。
- 请求到达反向代理,代理解析请求:读取URL、请求头、Cookie、请求方法等信息。
- 根据配置的转发规则,把请求转发给一台或多台后端业务服务器。
- 后端业务服务器处理业务逻辑,生成响应返回给反向代理。
- 反向代理把后端的响应报文(网页、接口数据、文件)处理后返回给浏览器。
- 用户全程只和反向代理打交道,看不到后端服务器。
主要能力
1. 负载均衡
如下图,taobao的访问量巨大,假设有n台tomcat,当浏览器访问时,先访问 nginx 反向代理服务器,由 nginx 将请求转发给tomcat
后端有多台业务服务器,反向代理按照策略把用户请求分发到不同后端节点,避免单台机器压力过大。
常见分发策略:
- 轮询:依次轮流分配请求;
- 权重轮询:性能强的机器分配更多请求;
- IP哈希:同一个客户端IP固定打到同一台后端;
- 最小连接数:交给当前连接数最少的服务器。
同时自带健康检查:自动探测后端服务器是否故障,故障节点直接剔除,不再转发流量,保证业务不中断。
2. 统一入口,隐藏后端真实服务
- 后端多台内网服务器不暴露公网,只有反向代理对外暴露公网地址。
- 客户端看不到后端服务器IP、端口,降低后端被直接攻击的风险。
- 多个业务服务可以共用同一个域名,通过路径区分:例如
/api转发接口服务,/admin转发后台服务。
3. SSL/TLS证书统一管理(HTTPS卸载)
所有HTTPS证书只配置在反向代理上。
- 用户访问走HTTPS加密连接,反向代理完成解密;
- 反向代理和后端服务器之间可以走HTTP明文通信;
- 好处:证书只需要维护一份,后端业务服务不用处理证书加密解密,释放后端CPU算力。这个行为也叫SSL终止/HTTPS卸载。
4. 静态资源缓存
反向代理可以缓存后端返回的静态资源(图片、JS、CSS、静态页面)。
用户再次请求相同资源时,代理直接返回缓存,不用再次请求后端,降低后端压力,提升访问速度。可以设置缓存有效期、哪些资源不缓存。
5. 请求与响应改写
可以在转发前后修改报文:
- 修改请求头:添加真实客户端IP、身份标识传给后端;
- 修改URL路径:用户访问的路径和后端接口路径不一致,自动改写;
- 修改响应头:跨域配置、安全响应头、跳转重定向。
6. 限流、访问控制、安全防护
在流量到达业务服务器之前做拦截:
- IP黑白名单,禁止特定IP访问;
- 请求速率限制,防止短时间大量请求打垮后端;
- 配合WAFWeb应用防火墙,过滤SQL注入、XSS攻击;
- 屏蔽非法请求,拦截异常报文。
7. 灰度发布、A/B测试
同一套系统新旧版本同时部署在不同后端节点,反向代理按规则分流流量:一部分用户访问新版本,一部分访问旧版本,实现灰度上线。
常见产品
- Nginx:最广泛,轻量高性能,多用于Web反向代理
- Caddy:自动HTTPS,配置简洁
- Apache httpd
- Traefik:面向容器,自动发现后端服务
- 云厂商负载均衡:阿里云SLB、腾讯CLB,云服务商托管的反向代理
典型应用场景
- 网站集群部署:大型网站的后端通常有多台 Web 服务器,反向代理负责分发用户请求,实现高可用与负载均衡。
- 微服务/API 网关:在微服务系统中,反向代理作为统一入口,接收客户端请求并路由到对应的微服务实例,同时统一处理认证、限流、跨域等功能。
- CDN 服务:CDN 的核心本质上是反向代理网络,边缘节点缓存源站内容,用户请求优先命中边缘节点,实现就近访问,降低网络延迟。
正向/反向代理
- 正向代理:站在客户端这边,替客户端上网,比如翻墙代理,服务器不知道真实用户是谁。
- 反向代理:站在服务端这边,替后端服务器接收请求,客户端不知道真正提供服务的后端机器是谁。
区别
在于代理的对象不同:
- 正向代理:是“替客户端办事”。客户端明确知道目标服务器的地址,但通过代理服务器去访问(例如翻墙工具)。主要目的是突破访问限制、隐藏客户端真实 IP。
- 反向代理:是“替服务器办事”。客户端不知道后端真实服务器的存在。主要目的是负载均衡、保护后端服务器、缓存加速。
常见部署架构
1. 架构一:单业务多实例
用户 → 反向代理 → 多台相同业务后端,做负载均衡。
架构二:多业务聚合
用户 → 反向代理,根据域名/路径,分别转发给:前端页面服务、后端接口、文件服务、后台管理系统。
架构三:分层架构
用户 → 云负载均衡(反向代理) → Nginx(第二层反向代理) → 业务服务,多层代理。
关键概念与注意点
1. 真实客户端IP传递
经过反向代理之后,后端拿到的源IP是代理服务器IP,不是用户真实IP。需要代理通过请求头把用户真实IP传递给后端,后端读取这个头获取真实访客IP。
2. 会话问题
如果后端有多台服务器,没有做会话共享,同一个用户两次请求被分发到不同后端,会出现登录状态丢失。解决方案:IP哈希粘性会话,或者后端统一使用Redis等共享会话存储。
3. 反向代理本身是单点风险
反向代理成为整个系统流量入口,如果代理挂掉,全部业务不可用。生产环境会做多台代理高可用,避免单点故障。
4. 七层代理 vs 四层代理
- 七层反向代理(HTTP层):解析HTTP协议,可以读取URL、Header,做路径路由、缓存、改写,Nginx、Caddy属于七层。
- 四层代理(TCP层):只转发TCP数据包,不解析HTTP内容,只基于IP端口转发,性能更高,无法做URL路径级别的路由。
和网关、负载均衡的关系
- 反向代理:是一类技术;
- 负载均衡:反向代理最常用的一个功能;
- API网关:属于增强版反向代理,除代理转发之外,增加鉴权、鉴权、路由、限流、日志监控等更多业务能力。
简单理解:所有API网关都是反向代理,但反向代理不一定是网关。
优缺点
优点
- 后端服务隔离保护,内网业务不暴露公网;
- 流量分发,提升系统并发能力,实现水平扩展;
- 证书、缓存、安全逻辑集中处理,业务服务专注业务逻辑;
- 后端机器可以随时扩容、下线,用户无感知。
缺点
- 新增一层网络,引入代理本身故障风险;
- 多一层转发,带来微小网络延迟;
- 配置不当会出现IP丢失、跨域异常、Cookie失效等问题;
- 代理成为攻击目标,如果代理被攻破,所有后端流量都暴露。
