以下是一个关于Nginx负载均衡的详细配置示例,涵盖多种算法、健康检查、会话保持等核心功能:
一、基础负载均衡配置
http {
# 定义后端服务器组(默认轮询算法)
upstream backend_pool {
# 基础服务器列表
server 192.168.1.100:8080;
server 192.168.1.101:8080;
server 192.168.1.102:8080;
# 高级参数配置
zone backend_pool 64k; # 共享内存区(用于状态监控)
least_conn; # 切换为最少连接算法(覆盖默认轮询)
keepalive 32; # 长连接保持数(减少TCP握手)
health_check interval=10s # 健康检查间隔
fails=3 # 连续失败3次标记为不可用
passes=2; # 需连续成功2次恢复可用
}
server {
listen 80;
server_name lb.example.com;
location / {
proxy_pass http://backend_pool;
# 连接超时设置
proxy_connect_timeout 5s;
proxy_send_timeout 30s;
proxy_read_timeout 30s;
# 缓冲区配置
proxy_buffering on;
proxy_buffer_size 4k;
proxy_buffers 8 16k;
}
}
}
二、高级负载均衡策略
1. 加权轮询(Weighted Round Robin)
upstream backend_pool {
server 192.168.1.100:8080 weight=5; # 高性能节点
server 192.168.1.101:8080 weight=3;
server 192.168.1.102:8080 weight=2; # 低性能节点
}
2. IP哈希(IP Hash)
upstream backend_pool {
ip_hash; # 相同客户端IP始终访问同一后端
server 192.168.1.100:8080;
server 192.168.1.101:8080;
}
3. 最少连接(Least Connections)
upstream backend_pool {
least_conn; # 动态选择连接数最少的节点
server 192.168.1.100:8080;
server 192.168.1.101:8080;
}
4. 会话保持(Session Persistence)
upstream backend_pool {
hash $cookie_JSESSIONID; # 基于Cookie的会话保持
server 192.168.1.100:8080;
server 192.168.1.101:8080;
}
三、动态负载均衡(需Nginx Plus)
upstream dynamic_pool {
zone dynamic_pool 64k;
# 动态服务器组(通过API动态管理)
server 192.168.1.100:8080 max_fails=2 fail_timeout=30s;
server 192.168.1.101:8080 resolve; # 支持DNS SRV记录
# 主动健康检查
health_check uri=/health_check; # 自定义健康检查端点
health_check interval=5s;
}
四、SSL终止与缓存配置
upstream ssl_pool {
server 192.168.1.100:8443;
server 192.168.1.101:8443;
keepalive 16; # 保持长连接(需与后端SSL会话缓存配合)
}
server {
listen 443 ssl;
server_name secure.example.com;
ssl_certificate /etc/nginx/ssl/cert.pem;
ssl_certificate_key /etc/nginx/ssl/key.pem;
location / {
proxy_pass https://ssl_pool;
proxy_ssl_session_reuse on; # 复用SSL会话
proxy_cache cache_zone; # 启用代理缓存
proxy_cache_valid 200 302 10m;
}
}
五、监控与调试配置
http {
# 启用状态监控端点
server {
listen 8080;
server_name status.example.com;
location /nginx_status {
stub_status on; # 基础状态
allow 192.168.1.0/24; # 访问控制
deny all;
}
location /upstream_status {
upstream_conf; # Nginx Plus专用状态页
allow 192.168.1.0/24;
deny all;
}
}
}
六、配置验证与优化
-
语法检查
nginx -t -c /path/to/nginx.conf # 指定配置文件测试
-
实时状态查看
curl http://localhost/nginx_status # 输出示例: # Active connections: 12 # server accepts: 3456 handled: 3456 requests: 6789
-
日志分析
log_format upstream_log '$remote_addr - $remote_user [$time_local] ' '"$request" $status $body_bytes_sent ' '"$http_referer" "$http_user_agent" ' 'rt=$request_time uct="$upstream_connect_time" ' 'uht="$upstream_header_time" urt="$upstream_response_time"'; access_log /var/log/nginx/upstream.log upstream_log;
-
性能调优建议
- 调整
worker_connections
匹配实际业务流量 - 根据RTT优化
proxy_timeout
参数 - 对静态资源启用
proxy_cache
减少后端压力 - 使用
tcp_nopush
和tcp_nodelay
优化TCP传输
- 调整
通过合理配置负载均衡策略和监控机制,可显著提升系统可用性和响应速度。实际部署时建议通过压力测试工具(如wrk、ab)验证配置效果,并根据监控数据持续优化参数。