name: 负载均衡器 description: 配置nginx负载均衡,包括上游服务器、健康检查和故障转移策略。用于设置负载均衡、在多个服务器上分发流量或配置上游后端。
负载均衡器配置
快速开始
配置nginx以在多个后端服务器上分发流量,包括健康检查和自动故障转移。
说明
步骤 1: 定义上游块
使用后端服务器创建上游块:
upstream backend {
# 负载均衡方法(可选,默认为轮询)
least_conn; # 或 ip_hash,或省略以使用轮询
# 后端服务器
server backend1.example.com:8080 weight=3;
server backend2.example.com:8080 weight=2;
server backend3.example.com:8080;
# 备份服务器(当所有主服务器都宕机时使用)
server backup.example.com:8080 backup;
# 健康检查参数
keepalive 32;
}
步骤 2: 在服务器块中配置代理
添加代理配置以将流量路由到上游:
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://backend;
# 必要的代理头
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;
# 超时设置
proxy_connect_timeout 60s;
proxy_send_timeout 60s;
proxy_read_timeout 60s;
# 缓冲设置
proxy_buffering on;
proxy_buffer_size 4k;
proxy_buffers 8 4k;
}
}
步骤 3: 添加健康检查
配置被动健康检查(主动检查需要nginx Plus):
upstream backend {
server backend1.example.com:8080 max_fails=3 fail_timeout=30s;
server backend2.example.com:8080 max_fails=3 fail_timeout=30s;
server backend3.example.com:8080 max_fails=3 fail_timeout=30s;
}
参数:
max_fails: 在标记服务器为不可用之前的失败尝试次数fail_timeout: 重试失败服务器前的等待时间
步骤 4: 测试和重新加载
# 测试配置
nginx -t
# 重新加载nginx
nginx -s reload
负载均衡方法
轮询(默认): 在服务器之间均匀分发请求
upstream backend {
server backend1.example.com:8080;
server backend2.example.com:8080;
}
最少连接: 路由到活跃连接最少的服务器
upstream backend {
least_conn;
server backend1.example.com:8080;
server backend2.example.com:8080;
}
IP哈希: 将相同客户端IP路由到相同服务器(会话持久性)
upstream backend {
ip_hash;
server backend1.example.com:8080;
server backend2.example.com:8080;
}
加权: 基于服务器容量分发
upstream backend {
server backend1.example.com:8080 weight=3; # 获得3倍流量
server backend2.example.com:8080 weight=1;
}
常见模式
WebSocket代理
location /ws {
proxy_pass http://backend;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
使用Cookie的粘性会话
upstream backend {
server backend1.example.com:8080;
server backend2.example.com:8080;
# 需要nginx Plus或第三方模块
sticky cookie srv_id expires=1h domain=.example.com path=/;
}
慢启动(nginx Plus)
upstream backend {
server backend1.example.com:8080 slow_start=30s;
server backend2.example.com:8080 slow_start=30s;
}
高级
有关详细信息,请参阅: