Nginx 负载均衡
1. 负载均衡简介
负载均衡(Load Balancing)是一种将网络流量分配到多个服务器的技术,目的是优化资源使用、最大化吞吐量、最小化响应时间,并避免任何单一服务器的过载。
2. Nginx 负载均衡算法
Nginx 支持以下几种负载均衡算法:
- 轮询(Round Robin):默认算法,按顺序将请求分配给服务器
- 加权轮询(Weighted Round Robin):根据服务器权重分配请求
- IP 哈希(IP Hash):根据客户端 IP 地址分配请求
- 最少连接(Least Connections):将请求分配给连接数最少的服务器
- URL 哈希(URL Hash):根据请求的 URL 分配请求
3. 基本配置示例
http {
upstream backend {
server backend1.example.com weight=5;
server backend2.example.com weight=5;
server backend3.example.com weight=5;
}
server {
listen 80;
location / {
proxy_pass http://backend;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
}
4. 健康检查
Nginx 提供了健康检查功能,可以自动检测后端服务器的状态:
upstream backend {
server backend1.example.com max_fails=3 fail_timeout=30s;
server backend2.example.com max_fails=3 fail_timeout=30s;
}
5. 会话保持
5.1 IP Hash 方式
upstream backend {
ip_hash;
server backend1.example.com;
server backend2.example.com;
}
5.2 Cookie 方式
upstream backend {
server backend1.example.com;
server backend2.example.com;
sticky cookie srv_id expires=1h domain=.example.com path=/;
}
6. 最佳实践
合理设置超时时间
proxy_connect_timeout 60s; proxy_send_timeout 60s; proxy_read_timeout 60s;启用压缩
gzip on; gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;缓存配置
proxy_cache_path /path/to/cache levels=1:2 keys_zone=my_cache:10m max_size=10g inactive=60m use_temp_path=off;
7. 监控和维护
状态监控
- 使用 Nginx Plus 或第三方监控工具
- 配置访问日志和错误日志
- 设置告警机制
性能优化
- 调整工作进程数
- 配置缓冲区大小
- 启用 keepalive 连接
8. 常见问题解决
502 Bad Gateway
- 检查后端服务器是否正常运行
- 验证网络连接
- 检查超时设置
504 Gateway Timeout
- 增加超时时间
- 检查后端服务器性能
- 优化数据库查询
9. 安全建议
- 限制请求频率
- 配置 SSL/TLS
- 设置适当的访问控制
- 定期更新 Nginx 版本
