前言
Nginx是目前最流行的高性能Web服务器和反向代理服务器。本文介绍Nginx作为反向代理和负载均衡器时的核心配置技巧。
一、基础反向代理配置
最简单的反向代理配置,将请求转发到后端服务:
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://127.0.0.1:3000;
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;
}
}
二、负载均衡策略
Nginx支持多种负载均衡算法:
2.1 轮询(默认)
upstream backend {
server 192.168.1.10:3000;
server 192.168.1.11:3000;
server 192.168.1.12:3000;
}
2.2 权重分配
upstream backend {
server 192.168.1.10:3000 weight=3; # 处理3/6的请求
server 192.168.1.11:3000 weight=2; # 处理2/6的请求
server 192.168.1.12:3000 weight=1; # 处理1/6的请求
}
2.3 IP哈希(会话保持)
upstream backend {
ip_hash;
server 192.168.1.10:3000;
server 192.168.1.11:3000;
}
三、SSL终止配置
在Nginx层终止SSL,后端服务使用HTTP通信:
server {
listen 443 ssl http2;
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;
# HSTS
add_header Strict-Transport-Security "max-age=31536000" always;
location / {
proxy_pass http://backend;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
# HTTP到HTTPS跳转
server {
listen 80;
server_name example.com;
return 301 https://$server_name$request_uri;
}
四、限流配置
防止恶意请求和DDoS攻击:
# 在http块中定义限流区域
limit_req_zone $binary_remote_addr zone=api:10m rate=10r/s;
server {
location /api/ {
limit_req zone=api burst=20 nodelay;
proxy_pass http://backend;
}
}
五、WebSocket代理
Nginx代理WebSocket连接需要特殊配置:
location /ws {
proxy_pass http://backend;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_read_timeout 86400;
}
六、常用优化参数
| 参数 | 说明 | 推荐值 |
|---|---|---|
| worker_processes | 工作进程数 | auto(CPU核心数) |
| worker_connections | 每个进程最大连接数 | 4096 |
| keepalive_timeout | 连接超时时间 | 65s |
| client_max_body_size | 最大上传文件大小 | 按需求设置 |
| gzip | 启用压缩 | on |
七、总结
Nginx作为反向代理的核心优势:
- 高性能:基于事件驱动模型,单进程可处理上万并发连接
- 灵活配置:支持多种负载均衡策略和路由规则
- SSL终止:集中管理证书,简化后端配置
- 安全防护:限流、黑名单、请求过滤等
- 静态资源服务:动静分离,提升整体性能