正向代理 vs 反向代理
正向代理 (Forward Proxy)
客户端 → 代理服务器 → 目标服务器
特点:
- 客户端知道代理:客户端主动使用代理
- 隐藏客户端:目标服务器不知道真实客户端
- 常见用途:fq、加速访问
反向代理 (Reverse Proxy)
客户端 → 代理服务器 → 后端服务器
特点:
- 客户端不知道代理:客户端以为直接访问目标
- 隐藏后端服务器:客户端不知道真实后端
- 常见用途:负载均衡、缓存、SSL终止
具体例子对比
正向代理例子:
你的电脑 → VPN服务器 → YouTuBo
- 你知道:你在使用VPN
- YouTuBo看到:VPN服务器的IP,不是你的IP
- 目的:隐藏你的真实IP
反向代理例子:
你的电脑 → Nginx → Spring Boot
- 你不知道:你以为直接访问Spring Boot
- 实际:Nginx在中间转发
- 目的:隐藏Spring Boot,统一入口
你的项目中的反向代理
用户视角:
用户访问:http://你服务器IP/api/meal/save
用户以为:直接访问Spring Boot
实际流程:
1. 用户请求 → Nginx (80端口)
2. Nginx转发 → Spring Boot (8080端口)
3. Spring Boot处理 → 返回给Nginx
4. Nginx返回 → 用户
用户不知道的:
- Spring Boot运行在8080端口
- 有Nginx在中间转发
- 后端服务器被隐藏了
反向代理的作用
1. 隐藏后端服务器
用户看到:http://你服务器ip/api/meal/save
实际访问:http://localhost:8080/meal/save
- 用户不知道:Spring Boot的真实地址
- 安全:后端服务器不直接暴露
2. 统一入口
所有请求都通过:http://101.201.254.71
- 前端页面:/
- API请求:/api/
- 静态资源:/assets/
- 统一管理:所有请求都通过Nginx
- 简化配置:只需要一个域名
3. 负载均衡
Nginx → 多个Spring Boot实例
- 实例1:localhost:8080
- 实例2:localhost:8081
- 实例3:localhost:8082
- 分散压力:请求分发到多个服务器
- 提高性能:避免单点故障
实际配置对比
没有反向代理:
用户直接访问:http://你的服务器Ip:8080/meal/save
问题:
- 暴露后端端口
- 不安全
- 难以管理
有反向代理:
用户访问:http://你的服务器Ip/api/meal/save
Nginx转发:http://localhost:8080/meal/save
优势:
- 隐藏后端端口
- 安全
- 统一管理
你的项目架构
完整架构:
用户浏览器
↓
Nginx (反向代理)
↓
Spring Boot (后端服务)
↓
MariaDB (数据库)
反向代理的好处:
- 隐藏Spring Boot:用户不知道8080端口
- 统一入口:所有请求都通过80端口
- 安全:后端服务器不直接暴露
- 扩展性:可以轻松添加更多后端服务
总结
正向代理:
- 客户端知道代理
- 隐藏客户端
- 客户端主动使用
反向代理:
- 客户端不知道代理
- 隐藏后端服务器
- 服务器主动配置