正向代理 vs 反向代理

正向代理与反向代理详解

正向代理
请求目标服务器\n(客户端知道目标)
代表客户端访问
响应
转发响应
代理服务器
客户端
目标服务器
反向代理
请求服务\n(不知道真实服务器)
分发请求
分发请求
分发请求
响应
响应
响应
响应
反向代理服务器
客户端
真实服务器1
真实服务器2
真实服务器3

⭐ 正向代理详解

核心定义

正向代理是代表客户端向目标服务器获取资源的中间服务器。

关键特点: 客户端明确知道目标服务器,代理替客户端访问

工作原理

  1. 客户端明确配置使用代理服务器
  2. 客户端发送请求到代理服务器,指明目标地址
  3. 代理服务器转发请求到目标服务器
  4. 代理服务器接收响应并返回给客户端

典型应用场景

  • 网络访问控制: 企业内网用户通过代理访问外网
  • 访问受限资源: 绕过区域限制访问内容
  • 匿名上网: 隐藏客户端真实IP
  • 科学上网: 访问被防火墙屏蔽的网站
  • 内容过滤: 控制用户可访问的内容类型
// 浏览器代理设置示例
const proxyConfig = {
  host: "proxy.example.com",
  port: 8080,
  auth: {
    username: "user",
    password: "pass"
  }
};

// 客户端代码示例
const axios = require('axios');
const httpsProxyAgent = require('https-proxy-agent');

const agent = new httpsProxyAgent(`http://${proxyConfig.auth.username}:${proxyConfig.auth.password}@${proxyConfig.host}:${proxyConfig.port}`);

axios.get('https://www.target-website.com', { 
  httpsAgent: agent 
})
.then(response => console.log(response.data));

反向代理详解

核心定义

反向代理是代表服务器端接收客户端请求并分发到后端服务器的中间服务器。

关键特点: 客户端不知道真实服务器,认为代理就是最终服务器

工作原理

  1. 客户端直接向反向代理发送请求(不知道背后有多个服务器)
  2. 反向代理根据规则将请求分发到实际的后端服务器
  3. 后端服务器处理请求并将响应发送到反向代理
  4. 反向代理将响应转发给客户端

典型应用场景

  • 负载均衡: 分散请求到多台服务器提高系统整体性能
  • 安全防护: 隐藏真实服务器,提供WAF防护
  • SSL终端: 集中处理加密/解密,减轻后端服务器负担
  • 缓存静态内容: 减少后端服务器负载
  • 内容压缩: 在代理层压缩响应提高传输效率
# Nginx反向代理配置示例
http {
    # 定义服务器组
    upstream backend_servers {
        server 192.168.1.10:8080;
        server 192.168.1.11:8080;
        server 192.168.1.12:8080;
    }
    
    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;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }
    }
}

正向代理 vs 反向代理对比

特性 正向代理 反向代理
代表方 代表客户端 代表服务器
对客户端 必须配置代理 对客户端透明
对服务器 隐藏客户端身份 隐藏真实服务器
访问目标 客户端指定 代理决定
典型应用 科学上网、匿名访问 负载均衡、安全防护
部署位置 通常靠近客户端 通常靠近服务器
常见软件 Shadowsocks、V2Ray Nginx、HAProxy
客户端知道
代理不知道
客户端不知道
代理知道
代理站在客户端立场
代理站在服务器立场
如何区分两种代理
谁知道真实目标服务器?
正向代理
反向代理
代理站在谁的立场?

生动类比

正向代理就像你的"跑腿员":

  • 你明确告诉他去哪个商店买什么
  • 他代表你去完成任务并带回物品
  • 商店只知道跑腿员,不知道是你要买东西

反向代理就像"前台接待员":

  • 客户来到大楼只知道前台接待
  • 接待员根据客户需求决定引导去哪个部门
  • 客户不知道具体是哪个部门处理了他的事情

总结

  • 正向代理关键点:

    • 代表客户端向目标服务器发送请求
    • 客户端知道目标服务器
    • 目标服务器不知道真实客户端
    • 需要客户端主动配置
  • 反向代理关键点:

    • 代表服务器接收客户端请求
    • 客户端不知道真实服务器
    • 请求分发由代理服务器自行决定
    • 对客户端完全透明

两种代理方式各有优势,在不同场景下解决不同问题,理解它们的区别对于设计网络架构至关重要!

你可能感兴趣的:(代理,正向代理,反向代理)