正向代理与反向代理
理解正向代理和反向代理的区别及应用场景
问题
正向代理与反向代理的区别是什么?
解答
正向代理
正向代理代理的是客户端,服务端不知道真实的客户端是谁。
客户端 -> 正向代理 -> 服务端
(代理客户端)
典型场景:
- 科学上网(VPN)
- 访问受限资源
- 隐藏客户端 IP
# 正向代理配置示例
server {
listen 8080;
location / {
# 代理到目标服务器
proxy_pass http://$http_host$request_uri;
}
}
反向代理
反向代理代理的是服务端,客户端不知道真实的服务端是谁。
客户端 -> 反向代理 -> 服务端
(代理服务端)
典型场景:
- 负载均衡
- 隐藏服务器真实 IP
- SSL 终止
- 缓存静态资源
# 反向代理配置示例
upstream backend {
server 192.168.1.1:8080;
server 192.168.1.2:8080;
}
server {
listen 80;
server_name example.com;
location / {
# 反向代理到后端服务器集群
proxy_pass http://backend;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
对比图示
正向代理:
[客户端A] ─┐
[客户端B] ─┼─> [正向代理] ──> [服务端]
[客户端C] ─┘
客户端知道代理存在,服务端不知道真实客户端
反向代理:
┌─> [服务端A]
[客户端] ──> [反向代理] ──┼─> [服务端B]
└─> [服务端C]
客户端不知道真实服务端,服务端知道代理存在
关键点
- 代理对象不同:正向代理代理客户端,反向代理代理服务端
- 隐藏对象不同:正向代理隐藏客户端,反向代理隐藏服务端
- 配置位置不同:正向代理配置在客户端,反向代理配置在服务端
- 用途不同:正向代理用于访问控制,反向代理用于负载均衡、安全防护
- 感知方不同:正向代理客户端主动配置,反向代理对客户端透明
目录