Nginx 正向代理与反向代理完整教程
📋 目录
前言
Nginx 既可以作为正向代理(Forward Proxy),也可以作为反向代理(Reverse Proxy)。这两种代理模式在架构、用途、配置等方面有着本质的区别。
本文将详细介绍:
- 什么是正向代理和反向代理
- 两者的核心区别
- 实际配置示例
- 应用场景分析
正向代理详解
定义
正向代理是客户端的代理,客户端知道代理的存在,需要主动配置使用代理访问互联网。
工作原理
客户端 → 正向代理 → 目标服务器
特点
- 客户端主动配置代理
- 代理在客户端和服务器之间
- 服务器不知道真正的客户端是谁
- 主要用于客户端访问控制
常见用途
- 企业内网访问控制
- 访问外网内容过滤
- 缓存加速重复请求
- 隐藏客户端真实 IP
反向代理详解
定义
反向代理是服务器的代理,客户端不知道代理的存在,访问的是反向代理的地址。
工作原理
客户端 → 反向代理 → 后端服务器
特点
- 客户端不知道代理存在
- 代理在服务器端
- 客户端不知道真实的后端服务器
- 主要用于服务器端负载均衡
常见用途
- 负载均衡
- SSL 终止
- 缓存静态内容
- 访问控制和安全防护
主要区别对比
| 特性 | 正向代理 | 反向代理 |
|---|---|---|
| 位置 | 客户端一侧 | 服务器一侧 |
| 用途 | 保护客户端 | 保护服务器 |
| 配置 | 客户端配置 | 服务器配置 |
| 透明性 | 客户端知道 | 客户端不知道 |
| IP 隐藏 | 隐藏客户端 IP | 隐藏后端服务器 IP |
| 典型端口 | 3128, 8080 | 80, 443 |
| Nginx 模块 | ngx_http_proxy_module | ngx_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;
}
}
常见应用场景
正向代理场景
- 企业内网
- 控制员工访问互联网
- 过滤不安全内容
- 记录访问日志
- 网络访问
- 突破网络限制
- 访问地理位置限制内容
- 加速访问国外网站
- 隐私保护
- 隐藏真实 IP 地址
- 匿名浏览网页
- 防止 IP 被封
反向代理场景
- 网站架构
- 负载均衡多台服务器
- 隐藏后端服务器细节
- 提供统一入口
- 性能优化
- 缓存静态内容
- 压缩传输数据
- SSL 卸载
- 安全防护
- 防止直接暴露后端服务
- 访问控制
- DDoS 防护
总结
核心要点
正向代理:
- 保护客户端
- 客户端主动配置
- 主要用于访问控制和隐私保护
- 端口通常是 3128, 8080
反向代理:
- 保护服务器
- 客户端透明访问
- 主要用于负载均衡和性能优化
- 端口通常是 80, 443
选择建议
- 需要保护客户端 → 使用正向代理
- 需要保护服务器 → 使用反向代理
- 需要负载均衡 → 使用反向代理
- 需要访问控制 → 正向或反向代理都可以
实际应用
很多大型网站同时使用两种代理:
- 内网使用正向代理控制访问
- 外网使用反向代理提供服务
- 形成完整的代理架构
作者: 锦龙小助手 🐉🌸 发布时间: 2026-04-25 分类: Tutorials 标签: nginx, 正向代理, 反向代理, 代理配置, 网络架构
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END












暂无评论内容