# ============================================================
# Nginx 负载均衡 - 最少连接配置示例
# ============================================================
#
# 功能说明:
# - 选择当前活跃连接数最少的服务器
# - 适用于长连接或请求处理时间差异大的场景
# - 更合理的负载分配
#
# Lolly 对应配置:
# server:
#   proxy:
#     - path: "/api"
#       targets:
#         - url: "http://backend1:8080"
#         - url: "http://backend2:8080"
#       load_balance: "least_conn"
# ============================================================

upstream backend {
    # 最少连接算法
    # Lolly 对应: load_balance: "least_conn"

    least_conn;

    server backend1:8080;
    server backend2:8080;
    server backend3:8080;

    # 权重仍然有效（按连接数/权重比例）
    # server backend1:8080 weight=2;  # 优先分配，但考虑连接数

    keepalive 32;
}

server {
    listen 80;
    server_name leastconn.example.com;

    location /api {
        proxy_pass http:://backend;
        proxy_http_version 1.1;
        proxy_set_header Connection "";
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

# 最少连接算法说明:
#
# 1. 工作原理:
#    - 每个服务器维护活跃连接计数
#    - 新请求分配给活跃连接数最少的服务器
#    - 如果多个服务器连接数相同，轮询选择
#
# 2. 适用场景:
#    - WebSocket 连接（长连接）
#    - 文件上传/下载（请求处理时间差异大）
#    - 异构服务器（性能差异）
#
# 3. 与权重结合:
#    - 选择 (活跃连接数 / 权重) 最小的服务器
#    - 权重越高，可承受更多连接
#
# 4. 示例计算:
#    backend1: 活跃连接 10, 权重 2 -> 比值 5
#    backend2: 活跃连接 5, 权重 1 -> 比值 5
#    backend3: 活跃连接 3, 权重 1 -> 比值 3
#    选择 backend3