Nginx 反向代理配置 upstream 负载均衡时,默认即为轮询策略,无需额外参数,只需在 upstream 块中列出多个 server 地址。适用场景为后端服务无状态或共享会话存储,风险边界在于未配置会话保持可能导致用户登录状态丢失。
先说结论:Nginx upstream 模块默认启用轮询算法,配置多个后端服务器即可自动分发请求。
- 适合:后端服务无状态、希望流量均匀分布的场景
- 先准备:确认后端服务器 IP 端口可达,备份原有配置文件
- 验收:通过多次请求验证响应来自不同后端,检查错误日志
命令速用版
upstream backend {
server 192.168.1.10:8080;
server 192.168.1.11:8080;
}
server {
location / {
proxy_pass http://backend;
}
}将上述配置放入 http 块或独立配置文件中,注意 upstream 定义需在 server 块之前或同级 http 块内。
为什么会这样
Nginx 默认采用轮询策略是因为这是最通用的无状态分发方式。
在 upstream 块中未指定 least_conn、ip_hash 等参数时,Nginx 会按时间顺序逐一将请求分发到不同的后端服务器,如果某台服务器宕机,会自动剔除。
分步处理
第一步:编辑配置文件,通常在/etc/nginx/nginx.conf 或/etc/nginx/conf.d/目录下。
第二步:执行 nginx -t 检查配置语法是否正确,避免直接重启导致服务中断。
第三步:执行 nginx -s reload 重载配置,使 upstream 变更生效。
回滚提醒:若重载后出现 502 错误,立即恢复备份配置文件并再次 reload。
怎么验证是否生效
使用 curl 命令循环请求接口,观察响应头或日志中的后端地址变化。
for i in {1..10}; do curl -I http://your-domain.com; done在 Nginx 访问日志中配置$log_format 包含$upstream_addr 变量,查看请求被分发到了哪个 IP。
常见坑
会话保持问题:轮询策略下,用户连续请求可能落到不同服务器,若 session 未共享会导致登录失效。
后端健康检查:Nginx 开源版仅支持被动健康检查,需配置 max_fails 和 fail_timeout 参数识别宕机。
权重默认值:未指定 weight 参数时,所有服务器权重默认为 1,流量分配均匀。
常见问题
Nginx 负载均衡默认是什么策略?
默认是轮询策略,无需配置任何额外参数即可生效。
轮询模式会导致 Session 丢失吗?
会,如果后端服务本地存储 Session 且未共享,用户请求落到不同服务器会导致登录状态丢失。
如何暂时移除某台后端服务器?
在 upstream 的 server 行后添加 down 参数,该服务器将不参与负载均衡但仍保留配置。
参考来源
- Nginx Official Documentation, ngx_http_upstream_module, https://nginx.org/en/docs/http/ngx_http_upstream_module.html