Nginx 反向代理如何配置 upstream 负载均衡轮询策略

文章导读
Nginx 反向代理配置 upstream 负载均衡时,默认即为轮询策略,无需额外参数,只需在 upstream 块中列出多个 server 地址。适用场景为后端服务无状态或共享会话存储,风险边界在于未配置会话保持可能导致用户登录状态丢失。
📋 目录
  1. 命令速用版
  2. 为什么会这样
  3. 分步处理
  4. 怎么验证是否生效
  5. 常见坑
  6. 常见问题
  7. 参考来源
A A

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。

Nginx 反向代理如何配置 upstream 负载均衡轮询策略

怎么验证是否生效

使用 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