一、基础代理配置详解
反向代理的核心功能是将客户端请求透明地转发至后端服务,Nginx通过server和location指令实现这一机制。以下是一个典型的基础配置示例:
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;}}
关键指令解析
listen:指定监听端口(如80/443),可配合default_server参数处理默认请求server_name:支持通配符(如*.example.com)和正则表达式匹配proxy_pass:- 必须以
http://或https://开头 - 可指向域名、IP或上游组(upstream)
- 末尾斜杠影响路径处理(如
http://backend/会剥离匹配路径)
- 必须以
请求头传递机制
通过proxy_set_header可实现关键信息的透传:
Host:保持原始请求的域名X-Real-IP:记录客户端真实IPX-Forwarded-For:构建代理链(支持多级代理场景)
二、HTTPS安全代理配置
在金融、电商等敏感场景中,SSL加密是必备配置。以下是完整的SSL代理方案:
server {listen 443 ssl;server_name example.com;ssl_certificate /etc/nginx/ssl/cert.pem;ssl_certificate_key /etc/nginx/ssl/key.pem;ssl_protocols TLSv1.2 TLSv1.3;ssl_ciphers HIGH:!aNULL:!MD5;location / {proxy_pass http://backend_server;# 保持原有header设置}}
证书管理最佳实践
- 证书格式:优先使用PEM格式(包含证书链和私钥)
- 自动续期:结合Let’s Encrypt和Certbot实现自动化
- 性能优化:
- 启用
ssl_session_cache共享缓存 - 设置
ssl_session_timeout(建议10分钟)
- 启用
- 安全加固:
- 禁用弱协议(如SSLv3)
- 使用现代密码套件(如ECDHE+AESGCM)
三、WebSocket实时通信支持
WebSocket协议需要特殊的代理配置以维持长连接:
location /ws/ {proxy_pass http://websocket_server;proxy_http_version 1.1;proxy_set_header Upgrade $http_upgrade;proxy_set_header Connection "upgrade";# 针对WebSocket的超时优化proxy_read_timeout 600s;proxy_send_timeout 600s;}
关键配置要点
- 协议升级:必须设置
Upgrade和Connection头 - 超时控制:WebSocket连接通常需要延长超时时间
- 负载均衡:需确保所有后端节点支持WebSocket协议
四、负载均衡与高可用架构
通过upstream模块可构建分布式服务集群:
upstream backend_pool {server 192.168.1.10:8080 weight=3;server 192.168.1.11:8080;server 192.168.1.12:8080 backup;# 健康检查配置(需商业版或第三方模块)# health_check interval=10 fails=3 passes=2;}server {location / {proxy_pass http://backend_pool;proxy_next_upstream error timeout invalid_header;}}
调度算法详解
- 轮询(默认):按顺序分配请求
- 加权轮询:通过
weight参数分配不同权重 - IP哈希:
ip_hash指令实现会话保持 - 最少连接:
least_conn算法(需Nginx Plus)
故障转移机制
proxy_next_upstream定义重试条件max_fails和fail_timeout控制节点状态检测backup标记备用服务器
五、智能缓存控制策略
合理的缓存配置可显著提升性能:
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m inactive=60m;server {location / {proxy_cache my_cache;proxy_cache_valid 200 302 10m;proxy_cache_valid 404 1m;proxy_cache_use_stale error timeout updating http_500;# 缓存键控制proxy_cache_key $scheme$proxy_host$request_uri;}}
缓存优化技巧
- 分级存储:
levels参数设置目录层级(如1:2表示两级目录) - 内存区域:
keys_zone定义共享内存大小(1MB约可存8000个key) - 主动失效:通过
proxy_cache_purge(需第三方模块)实现缓存清除 - 旁路缓存:对特定请求(如
/static/)强制使用缓存
六、性能调优参数矩阵
| 参数 | 默认值 | 推荐值 | 适用场景 |
|---|---|---|---|
| proxy_connect_timeout | 60s | 5s | 高延迟网络 |
| proxy_read_timeout | 60s | 300s | 文件下载服务 |
| proxy_send_timeout | 60s | 60s | 大文件上传 |
| proxy_buffer_size | 4k/8k | 16k | 大请求头场景 |
| proxy_buffers | 8 4k/8k | 16 16k | 高并发响应 |
七、监控与故障排查
- 日志分析:
- 启用
access_log和error_log - 使用
log_format自定义日志格式
- 启用
- 状态监控:
stub_status模块提供基础指标- 商业版支持更详细的API监控
- 常见问题:
- 502错误:检查后端服务可用性
- 499错误:客户端主动断开连接
- 缓存未生效:检查
Cache-Control头和proxy_cache_valid设置
通过系统化的配置管理,Nginx反向代理可支撑从简单网站到复杂分布式架构的各种场景。建议结合具体业务需求进行参数调优,并通过压力测试验证配置效果。对于超大规模部署,可考虑结合容器编排平台实现动态扩展。