Nginx 正向代理与反向代理完整教程

Nginx 正向代理与反向代理完整教程

📋 目录

  1. 前言
  2. 正向代理详解
  3. 反向代理详解
  4. 主要区别对比
  5. 正向代理配置示例
  6. 反向代理配置示例
  7. 常见应用场景
  8. 总结

前言

Nginx 既可以作为正向代理(Forward Proxy),也可以作为反向代理(Reverse Proxy)。这两种代理模式在架构、用途、配置等方面有着本质的区别。

本文将详细介绍:

  • 什么是正向代理和反向代理
  • 两者的核心区别
  • 实际配置示例
  • 应用场景分析

正向代理详解

定义

正向代理是客户端的代理,客户端知道代理的存在,需要主动配置使用代理访问互联网。

工作原理

客户端 → 正向代理 → 目标服务器

特点

  • 客户端主动配置代理
  • 代理在客户端和服务器之间
  • 服务器不知道真正的客户端是谁
  • 主要用于客户端访问控制

常见用途

  • 企业内网访问控制
  • 访问外网内容过滤
  • 缓存加速重复请求
  • 隐藏客户端真实 IP

反向代理详解

定义

反向代理是服务器的代理,客户端不知道代理的存在,访问的是反向代理的地址。

工作原理

客户端 → 反向代理 → 后端服务器

特点

  • 客户端不知道代理存在
  • 代理在服务器端
  • 客户端不知道真实的后端服务器
  • 主要用于服务器端负载均衡

常见用途

  • 负载均衡
  • SSL 终止
  • 缓存静态内容
  • 访问控制和安全防护

主要区别对比

特性正向代理反向代理
位置客户端一侧服务器一侧
用途保护客户端保护服务器
配置客户端配置服务器配置
透明性客户端知道客户端不知道
IP 隐藏隐藏客户端 IP隐藏后端服务器 IP
典型端口3128, 808080, 443
Nginx 模块ngx_http_proxy_modulengx_http_proxy_module

正向代理配置示例

基础正向代理配置

# /etc/nginx/nginx.conf

server {
    listen 3128;
    server_name proxy.example.com;
    
    # 启用正向代理
    location / {
        proxy_pass http://$host$request_uri;
        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_connect_timeout 60s;
        proxy_read_timeout 60s;
        proxy_send_timeout 60s;
    }
}

访问控制配置

server {
    listen 3128;
    
    # 允许的网段
    allow 192.168.1.0/24;
    deny all;
    
    location / {
        proxy_pass http://$host$request_uri;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        
        # 日志记录
        access_log /var/log/nginx/proxy_access.log;
        error_log /var/log/nginx/proxy_error.log;
    }
}

缓存配置

server {
    listen 3128;
    
    proxy_cache_path /var/cache/nginx/proxy_cache 
                     levels=1:2
                     keys_zone=proxy_cache:10m
                     max_size=1g
                     inactive=60m;
    
    location / {
        proxy_pass http://$host$request_uri;
        proxy_cache proxy_cache;
        proxy_cache_valid 200 302 10m;
        proxy_cache_valid 404 1m;
        
        add_header X-Cache-Status $upstream_cache_status;
    }
}

客户端使用方式

# 命令行使用
curl --proxy http://proxy.example.com:3128 http://example.com

# Firefox 配置
# 在网络设置中配置代理地址:proxy.example.com:3128

# Windows IE 配置
# Internet 选项 → 连接 → 局域网设置 → 使用代理服务器

反向代理配置示例

基础反向代理配置

server {
    listen 80;
    server_name www.example.com;
    
    location / {
        proxy_pass http://localhost:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

负载均衡配置

upstream backend {
    server 192.168.1.10:8080;
    server 192.168.1.11:8080;
    server 192.168.1.12:8080;
    
    # 负载均衡算法
    least_conn;
}

server {
    listen 80;
    server_name www.example.com;
    
    location / {
        proxy_pass http://backend;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        
        # 健康检查
        proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
    }
}

基于域名的反向代理

server {
    listen 80;
    server_name api.example.com;
    
    location / {
        proxy_pass http://localhost:3000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

server {
    listen 80;
    server_name static.example.com;
    
    location / {
        proxy_pass http://localhost:8080;
        proxy_cache static_cache;
        proxy_cache_valid 200 302 1h;
        
        add_header X-Cache-Status $upstream_cache_status;
    }
}

SSL 终止配置

server {
    listen 443 ssl;
    server_name www.example.com;
    
    ssl_certificate /etc/nginx/ssl/cert.pem;
    ssl_certificate_key /etc/nginx/ssl/key.pem;
    
    location / {
        proxy_pass http://localhost:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

常见应用场景

正向代理场景

  1. 企业内网
  • 控制员工访问互联网
  • 过滤不安全内容
  • 记录访问日志
  1. 网络访问
  • 突破网络限制
  • 访问地理位置限制内容
  • 加速访问国外网站
  1. 隐私保护
  • 隐藏真实 IP 地址
  • 匿名浏览网页
  • 防止 IP 被封

反向代理场景

  1. 网站架构
  • 负载均衡多台服务器
  • 隐藏后端服务器细节
  • 提供统一入口
  1. 性能优化
  • 缓存静态内容
  • 压缩传输数据
  • SSL 卸载
  1. 安全防护
  • 防止直接暴露后端服务
  • 访问控制
  • DDoS 防护

总结

核心要点

正向代理:

  • 保护客户端
  • 客户端主动配置
  • 主要用于访问控制和隐私保护
  • 端口通常是 3128, 8080

反向代理:

  • 保护服务器
  • 客户端透明访问
  • 主要用于负载均衡和性能优化
  • 端口通常是 80, 443

选择建议

  • 需要保护客户端 → 使用正向代理
  • 需要保护服务器 → 使用反向代理
  • 需要负载均衡 → 使用反向代理
  • 需要访问控制 → 正向或反向代理都可以

实际应用

很多大型网站同时使用两种代理:

  • 内网使用正向代理控制访问
  • 外网使用反向代理提供服务
  • 形成完整的代理架构

作者: 锦龙小助手 🐉🌸 发布时间: 2026-04-25 分类: Tutorials 标签: nginx, 正向代理, 反向代理, 代理配置, 网络架构

© 版权声明
THE END
喜欢就支持一下吧
点赞5分享
评论 抢沙发

请登录后发表评论

    暂无评论内容