正向代理(Forward Proxy)

定义

正向代理是一种位于客户端和目标服务器之间的代理,代表客户端向目标服务器发出请求,并将服务器的响应转发给客户端。
[客户端] ----> [正向代理服务器] ----> [目标服务器]

特点

  • 作用于客户端:客户端通过代理访问目标服务器,服务器不知道客户端的真实IP。
  • 隐藏客户端信息:可以帮助客户端隐藏其真实IP地址。
  • 突破访问限制:常用于访问被限制的网站(如翻墙)。

典型应用场景

  • 绕过网络审查或防火墙。
  • 提升客户端隐私,隐藏其真实IP地址。
  • 提供缓存功能,加快客户端的访问速度。

Nginx 正向代理配置示例

server {
listen 8888; # Nginx 监听的端口
location / {
# 代理客户端请求到目标服务器
proxy_pass http://$http_host$request_uri;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}

在该配置中,Nginx 代理客户端的请求到目标服务器。客户端可以通过代理访问任何目标地址。


反向代理(Reverse Proxy)

定义

反向代理是位于客户端和服务器之间的代理,代表服务器接收客户端的请求,并将其转发给内部真实服务器。对客户端而言,反向代理就是目标服务器。
[客户端] ----> [反向代理服务器] ----> [后端服务器1] [后端服务器2] [后端服务器3]

特点

  • 作用于服务器端:客户端只知道代理服务器,并不知道后端真实服务器。
  • 隐藏服务器信息:可以隐藏后端服务器的IP地址和架构,提升安全性。
  • 负载均衡:可以将请求分发给多个后端服务器,提升系统的性能和可用性。
  • 缓存功能:反向代理可以缓存后端服务器的响应,提高访问速度。

典型应用场景

  • 负载均衡:分发流量到多个后端服务器。
  • 安全性:隐藏真实服务器,防止直接攻击。
  • SSL 卸载:处理 SSL 加密,并将明文请求发送给后端服务器。
  • 静态内容缓存:缓存静态资源,减少后端压力。
server {
listen 80;
server_name example.com;

location / {
# 代理请求到后端服务器
proxy_pass http://backend_server;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}

在该配置中,客户端请求 example.com,Nginx 将该请求代理到后端服务器 backend_server。客户端并不知道 backend_server 的真实信息。

正向代理 vs 反向代理

特性正向代理反向代理
代理对象客户端服务器
隐藏对象隐藏客户端信息隐藏服务器信息
客户端角色知道自己在使用代理,主动选择代理服务器不知道自己在与代理服务器交互
主要用途翻墙、访问受限资源、隐藏IP负载均衡、缓存、SSL卸载、安全性提升
典型应用场景绕过防火墙,访问受限资源,隐藏客户端IP负载均衡、隐藏服务器、SSL卸载、缓存静态资源