0

Nginx least_conn原理详解(测试)

2026.05.22 | youres | 12次围观
前言:在Nginx负载均衡的六大算法中,least_conn(最少连接)是一个经常被低估但非常实用的动态策略。它不按固定顺序转发请求,而是实时观察后端服务器的活跃连接数,把新请求交给最空闲的那一台。这篇文章从原理、源码逻辑、配置实战到适用场景,把least_conn讲透。什么是least_conn算法?least_conn(Least Connections,最少连接数)是一种动态负载均衡算法,核心逻辑是:新请求优先转发给当前活跃连接数最少的后端服务器。与轮询(round-robin)固定顺序分发不同,least_conn每次做决策时都会看一眼各后端的实时连接数,是一种感知后端负载状态的算法。为什么不用轮询?轮询(包括加权轮询)有一个隐含假设:每台请求的处理时间大致相同。现实中这个假设经常不成立。场景一:文件上传下载,某些请求耗时数十秒,导致被分配到的后端持续高负载。场景二:数据库复杂查询,请求耗时差异大,轮询会造成忙的忙死、闲的闲死。场景三:后端性能不一致,即便权重配置正确,处理时间差异仍会导致负载不均。least_conn的解决思路很简单:谁当前最闲,请求就给谁。least_conn核心工作原理:Nginx收到一个新请求需要转发时,least_conn的执行逻辑如下:1.遍历upstream中所有可用的后端服务器;2.读取每台的当前活跃连接数;3.计算conns/weight(有效负载值);4.选出有效负载值最小的那一台;5.如果多台并列最小,则在这几台之间执行加权轮询。连接数何时变化?请求转发给后端时:该后端的活跃连接数+1;后端返回响应、连接关闭时:活跃连接数-1。Nginx维护的连接数指的是当前正在处理的代理连接,不是TCP连接总数,也不是请求队列长度。权重如何参与运算?least_conn不是纯粹看连接数,而是看加权后的连接数。假设三台后端:server A权重5当前连接数20,server B权重3当前连接数12,server C权重1当前连接数3。此时server C的conns/weight最小,新请求会发给C。这个设计很合理:权重高的机器本来就应该承担更多连接。
版权声明

本文仅代表个人观点。
本文系AI辅助作者原创,未经许可,转载请保留原文链接。

标签: 测试
发表评论
883文章数 0评论数
作者其它文章