正向代理、反向代理

区别

  • 正向代理:代表客户端(如浏览器、爬虫)发送请求。需要在客户端主动配置代理地址。
  • 反向代理:代表服务端(如 Web 服务器)接收请求。客户端无感知,请求直接发到反向代理。

正向代理应用场景

正向代理常被用于:

  • 隐藏客户端身份:保护客户端真实 IP 或网络信息。也可以用来解决跨域问题。
  • 绕过访问限制:突破IP封锁、地域限制等(如访问某些地区的 API)。
  • 集中管控与审计:企业可通过代理监控和过滤员工的网络请求。

例子:企业内网的爬虫数据采集

比如某公司需要从公开网站抓取数据进行分析,但目标网站对同一 IP 的频繁请求有访问频率限制(例如每分钟最多 100 次请求)。直接使用公司内网的固定 IP 进行爬取,可能会因触发限制而被封禁。为此,开发团队可以部署多个正向代理服务器(如使用 Squid、Nginx 等),每个代理拥有不同的公网IP地址。然后在爬虫程序在发送请求时,通过代码逻辑轮询不同的代理服务器。例如:

python 复制代码
import requests

proxies = [
            {"http": "http://proxy1.company.com:8080"},
            {"http": "http://proxy2.company.com:8080"},
            # ...更多代理IP
          ]

for proxy in proxies:
    response = requests.get("https://target-website.com/data", proxies=proxy)
    # 处理响应数据

这样做的好处是:目标网站看到的是代理服务器的 IP,而非公司内网的真实 IP。而且通过轮换代理IP,避免了单一 IP 被检测和封禁。

反向代理应用场景

以下是一个使用 ​Nginx 作为反向代理的典型例子,用于将客户端请求转发到后端服务器,同时隐藏后端服务器的真实 IP 地址并提供负载均衡。

假设你有两个后端 Web 服务器(IP: 192.168.1.100:8080 和 192.168.1.101:8080),但希望对外通过一个统一的域名(如 example.com)访问,同时实现以下功能:

  • 对外隐藏后端服务器的真实 IP。
  • 实现负载均衡,分摊流量到两个后端服务器。
  • 启用 SSL 加密(HTTPS)。
  • 缓存静态资源(如图片、CSS)。

就可以在 Nginx 做如下配置:

nginx 复制代码
# 定义后端服务器组(负载均衡)
upstream backend_servers {
    server 192.168.1.100:8080;
    server 192.168.1.101:8080;
    # 可选:权重分配(如 server 192.168.1.100:8080 weight=3;)
}

# HTTPS 服务器配置
server {
    listen 443 ssl;
    server_name example.com;

    # SSL 证书配置
    ssl_certificate /etc/nginx/ssl/example.com.crt;
    ssl_certificate_key /etc/nginx/ssl/example.com.key;

    # 静态资源缓存配置
    location /static/ {
        proxy_cache my_cache;
        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;
        # 缓存设置
        proxy_cache_valid 200 304 12h;
        proxy_cache_valid any 5m;
    }

    # 动态请求代理配置
    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;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

# 可选:HTTP 重定向到 HTTPS
server {
    listen 80;
    server_name example.com;
    return 301 https://$host$request_uri;
}

用户访问 https://example.com 时,实际由 Nginx 代理到后端服务器。流量自动分配到两个后端服务器,提升可用性和性能。

相关推荐
Auc243 天前
OJ判题系统第4期之判题机模块架构——设计思路、实现步骤、代码实现(工厂模式、代理模式的实践)
java·spring cloud·log4j·mybatis·代理模式·工厂模式
Yang三少喜欢撸铁4 天前
【阿里云免费领取域名以及ssl证书,通过Nginx反向代理web服务】
nginx·阿里云·代理模式·ssl
Blurpath5 天前
什么是静态住宅IP?为什么静态住宅IP能提高注册通过率?
网络·代理模式·ip代理·住宅ip
python算法(魔法师版)5 天前
JavaScript性能优化实战,从理论到落地的全面指南
开发语言·性能优化·前端框架·代理模式
常某某的好奇心8 天前
代理模式(Proxy Pattern)
代理模式
彬彬醤8 天前
全局网络:重构数字时代的连接范式
运维·服务器·网络·数据库·重构·代理模式
菜鸟破茧计划11 天前
穿越数据森林与网络迷宫:树与图上动态规划实战指南
网络·动态规划·代理模式
yy鹈鹕灌顶12 天前
动态规划算法精解(Java实现):从入门到精通
代理模式
gaog2zh13 天前
010302-oss_反向代理_负载均衡-web扩展2-基础入门-网络安全
网络安全·负载均衡·oss·反向代理
帝锦_li13 天前
Java进阶--设计模式
观察者模式·单例模式·代理模式·抽象工厂模式·适配器模式·原型模式