反向代理(Reverse Proxy)是一种服务器架构技术,与常见的正向代理(Forward Proxy)相反,它代表服务端接收客户端的请求,并将请求转发到内部服务器,最终将结果返回给客户端。客户端通常感知不到反向代理的存在,认为响应直接来自反向代理服务器本身。
核心原理
1. 中间层角色:反向代理位于客户端和真实服务器(如Web服务器、应用服务器)之间。
2. 请求转发:客户端访问反向代理的地址(如域名或IP),反向代理根据规则将请求分发到后端服务器。
3. 结果返回:后端服务器处理请求后,将结果返回给反向代理,再由反向代理传递给客户端。
主要作用与优势
1. 负载均衡(Load Balancing)
- 场景:高并发访问时,反向代理将流量均匀分配到多个后端服务器,避免单点过载。
- 示例:Nginx通过轮询、权重等算法分发请求到不同的Web服务器。
2. 隐藏真实服务器
- 安全性:客户端只能看到反向代理的IP,无法直接访问后端服务器,防止DDoS攻击或恶意扫描。
- 示例:隐藏数据库服务器或内部API的地址。
3. 缓存加速
- 性能优化:反向代理可以缓存静态资源(如图片、HTML),减少后端服务器的重复计算和带宽消耗。
- 示例:CDN(内容分发网络)本质上是分布式反向代理缓存。
4. SSL/TLS终结
- 加密卸载:反向代理处理HTTPS加密/解密,减轻后端服务器的计算压力。
- 示例:Nginx配置SSL证书后,后端服务器只需处理HTTP明文请求。
5. 路由与过滤
- 灵活路由:根据URL、请求头等规则将请求分发到不同后端服务(如微服务架构)。
- 示例:`/api` 请求转发到应用服务器,`/static` 请求转发到文件服务器。
- 安全过滤:拦截恶意请求(如SQL注入、CC攻击)。
6. 跨域与协议转换
- 解决跨域:反向代理可统一域名和端口,避免浏览器同源策略限制。
- 协议转换:将HTTP请求转换为FastCGI、gRPC等后端支持的协议。
实际应用场景
1. Web服务:
- 用户访问 `example.com`,实际由Nginx反向代理转发到内部的Tomcat服务器。
2. 微服务网关:
- Kubernetes的Ingress通过反向代理将请求路由到不同的Pod。
3. CDN加速:
- 用户请求图片时,CDN节点(反向代理)返回缓存的副本,而非源站。
4. 企业内网:
- 通过反向代理统一暴露内部系统(如OA、ERP),避免直接暴露内网IP。
总结
反向代理是服务端的“流量调度中心”,核心价值在于提升性能、保障安全、简化架构。它让客户端与后端解耦,是现代分布式系统(如云计算、微服务)的基础组件之一。