least_conn算法需配合keepalive、协议头处理和超时设置才能有效解决长连接负载不均;须在upstream中启用least_conn、配置max_conns、keepalive,location中透传长连接,合理设置各类超时,并补全健康检查。
直接用 least_conn 算法是解决长连接业务下后端负载不均最有效的方式,但它不是单独开个指令就完事——必须配合 keepalive、协议头处理和超时设置,才能让连接数统计真实、调度逻辑生效。
在 upstream 块中启用 least_conn 的同时,注意以下关键点:
least_conn;,不加参数,也不和 weight 混用(Nginx 会忽略 weight)server 行可配 max_conns 实现软性容量分级,比如高性能节点设 max_conns=2000,普通节点设 800
keepalive N;(建议 16–32),否则连接频繁新建,活跃连接数无法稳定反映真实负载如果后端是 HTTP 服务,光有 upstream 配置还不够,location 中还要显式开启长连接透传:
proxy_http_version 1.1;
proxy_set_header Connection '';
keepAliveTimeout 配置长连接场景下,超时不合理会导致连接“假占位”,干扰 least_conn 判断:
proxy_read_timeout 至少等于后端最长预期处理时间(例如文件上传或报表导出设为 300 秒)keepalive_timeout 全局建议设为 65 秒,兼顾复用率与及时释放空闲连接proxy_connect_timeout 过短(如低于 1 秒),否则健康检查易误判least_conn 不自动剔除故障节点,必须手动配置健康探测:
server 加上 max_fails=2 fail_timeout=10s,连续失败 2 次暂停 10 秒/health 接口,推荐编译安装 nginx_upstream_check_module 做主动 HTTP 探测down 或 backup 标记保留人工干预入口,便于紧急隔离