代理分为正向代理(Forward Proxy) 和反向代理(Reverse Proxy) ,都是缓存服务器的功能,缓存服务器可以设置在客户端和服务端,设置在客户端有代理和防火墙的功能,设置在服务端有均衡负载的功能。
核心区别详解
1. 正向代理 (Forward Proxy) - 【替客户端打工】
- 角色: 站在客户端一侧,代表客户端向任意服务器发送请求。客户端知道代理的存在,并且需要主动配置使用代理。
- 请求中的URL: 完整URL(例如
GET http://www.example.com/index.html HTTP/1.1
)。这是最关键的一点。 - 工作方式:
- 客户端程序(如浏览器)被配置为使用代理。
- 当客户端想访问
www.example.com
时,它不再直接向www.example.com
发送请求,而是把整个请求原封不动地发给正向代理服务器。 - 正向代理服务器解析客户端的请求行,从中拿到目标服务器的完整地址 (
http://www.example.com
)。 - 代理服务器代表客户端,向
www.example.com
发起新的请求,并将收到的响应返回给客户端。
- 为什么可以发给任意Web服务器: 因为目标服务器的地址是由客户端每次请求动态提供的(在请求行里)。代理服务器不需要事先知道客户端要访问谁,它只是做一个简单的转发。
- 主要用途: 突破网络限制(科学上网)、隐藏客户端真实IP、客户端访问加速、内容过滤。
2. 反向代理 (Reverse Proxy) - 【替服务器打工】
- 角色: 站在服务器一侧,代表服务器接收来自任意客户端的请求。客户端通常不知道反向代理的存在,以为它就是真正的目标服务器。
- 请求中的URL: 路径和查询参数(例如
GET /index.html HTTP/1.1
),Host头(例如Host: www.my-company.com
)。 - 工作方式:
- 客户端向
www.my-company.com
发起请求,DNS 会将其解析到反向代理服务器的IP地址。 - 反向代理服务器收到请求。它看不到完整的
http://...
URL,它只能看到路径 (/index.html
) 和 Host 头。 - 代理服务器根据预先配置好的规则(例如:“将所有请求转发到后端的
192.168.1.10:8080
服务器”,或者“将/api/
路径的请求转发到10.0.0.2:3000
服务器”)来决定将请求转发给哪一台后端服务器。 - 它将请求转发给事先设置好的目标服务器,并将响应返回给客户端。
- 客户端向
- 为什么只能向事先设置好的目标转发: 因为反向代理无法从客户端请求中直接知道最终目标(客户端以为自己已经在和真实服务器通信了)。它必须依靠管理员预先设定的映射规则来判断应该将请求路由到后端的哪台服务器上。
- 主要用途: 负载均衡、隐藏真实服务器IP、安全防护(WAF)、SSL终止、统一入口、服务路由(API Gateway)、服务器端缓存。
总结对比表
特性 | 正向代理 (Forward Proxy) | 反向代理 (Reverse Proxy) |
---|---|---|
代理对象 | 客户端 | 服务器 |
配置方 | 客户端(需要显式配置代理) | 服务器端(客户端无感知) |
请求URL | 完整URL (http://example.com/ ) |
路径 (/index.html ) + Host头 |
目标服务器 | 动态决定(由客户端请求指定) | 静态配置(由管理员预先设置规则) |
可访问性 | 可以访问互联网上任意的Web服务器 | 只能访问事先配置好的后端服务器 |
主要目的 | 为客户端提供隐私、访问控制、突破限制 | 为服务器提供负载均衡、安全、高可用 |
简单记忆:
- 正向代理: “翻墙”代理。客户端用它来访问外部的任何网站。
- 反向代理: “网站入口”代理。所有用户通过它来访问内部的多个网站/服务。像Nginx、Apache Traffic Server就是典型的反向代理。