什么是反向代理?

反向代理 (Reverse Proxy)是一种位于目标服务器集群前端的代理服务器,它接收客户端发起的请求,然后根据规则将请求转发给后端的目标服务器,再将目标服务器的响应结果返回给客户端。

简单来说,正向代理 是"替客户端办事"(比如翻墙工具),客户端知道目标服务器的地址;而反向代理是"替服务器办事",客户端不知道后端真实服务器的地址,只知道反向代理服务器的地址。


核心特点

  1. 隐藏后端服务器

    客户端只能看到反向代理的地址,无法直接访问后端的真实服务器,从而保护后端服务器的安全,避免直接暴露在公网中。

  2. 请求转发与负载均衡

    当后端有多台服务器时,反向代理可以按照预设策略(如轮询、加权轮询、最少连接数)将请求分发到不同服务器,实现负载均衡,提升系统整体吞吐量和稳定性。

  3. 功能扩展

    • 缓存加速:缓存后端服务器的静态资源(如图片、CSS、JS),后续相同请求直接返回缓存内容,减轻后端压力。
    • SSL 终端:统一处理 HTTPS 加密解密,后端服务器只需处理 HTTP 请求,简化证书管理。
    • 过滤与防护:拦截恶意请求(如 SQL 注入、XSS),充当应用防火墙(WAF)的角色。
    • URL 重写:修改客户端请求的 URL 路径,适配后端服务器的路由规则。

典型应用场景

  1. 网站集群部署

    大型网站(如电商、新闻平台)的后端通常有多台 Web 服务器,反向代理(如 Nginx、Apache Traffic Server)负责分发用户请求,避免单台服务器过载。

  2. 微服务架构

    在微服务系统中,反向代理(或 API 网关,如 Kong、Spring Cloud Gateway)作为入口,接收客户端请求并路由到对应的微服务实例,同时统一处理认证、限流、监控等功能。

  3. CDN 服务

    CDN 的核心就是反向代理网络,边缘节点缓存源站内容,用户请求优先命中边缘节点,实现就近访问,降低延迟。


正向代理 vs 反向代理 核心区别

特性 正向代理 反向代理
代理对象 客户端 后端服务器集群
客户端感知 知道正向代理的存在 不知道后端服务器的存在
主要目的 突破访问限制、隐藏客户端 IP 负载均衡、保护后端、缓存加速
典型工具 代理服务器、VPN Nginx、HAProxy、Apache

举例:Nginx 反向代理配置(简化版)

nginx 复制代码
server {
    listen 80;
    server_name example.com;

    # 反向代理规则:将请求转发到后端服务器集群
    location / {
        proxy_pass http://backend_servers;  # 后端服务器组
        proxy_set_header Host $host;        # 传递请求头
        proxy_set_header X-Real-IP $remote_addr;  # 传递客户端真实IP
    }
}

# 后端服务器组(负载均衡)
upstream backend_servers {
    server 192.168.1.100:8080 weight=2;  # 权重2,优先分配请求
    server 192.168.1.101:8080 weight=1;
}

在这个配置中,用户访问 example.com 时,请求会被 Nginx 接收,然后转发到 192.168.1.100192.168.1.101,用户完全感知不到后端服务器的存在。

相关推荐
古城小栈7 小时前
从 cargo-whero 库中,找到提升 rust 的契机
开发语言·后端·rust
keep one's resolveY7 小时前
SpringBoot实现重试机制的四种方案
java·spring boot·后端
阿丰资源9 小时前
基于Spring Boot的电影城管理系统(直接运行)
java·spring boot·后端
IT_陈寒9 小时前
SpringBoot自动配置的坑差点让我加班到天亮
前端·人工智能·后端
消失的旧时光-194310 小时前
Spring Boot 工程化进阶:统一返回 + 全局异常 + AOP 通用工具包
java·spring boot·后端·aop·自定义注解
追风筝的人er11 小时前
SpringBoot+Vue3 企业考勤如何处理法定假期?节假日方案、调休补班与工作日判断链路拆解
前端·vue.js·后端
金銀銅鐵12 小时前
[git] 如何丢弃对一个文件的改动?
git·后端
techdashen12 小时前
Cloudflare 为何抛弃 NGINX,用 Rust 自研了一个代理
运维·nginx·rust
橘子海全栈攻城狮12 小时前
【最新源码】养老院系统管理A013
java·spring boot·后端·web安全·微信小程序
smallyoung12 小时前
具有反思能力的 Agentic RAG 实战:用 LangChain4j 实现 CRAG 纠错检索
人工智能·后端