NGINX TCP 负载平衡是 ip-sticky,但根据请求,它应该是随机的

NGINX TCP 负载平衡是 ip-sticky,但根据请求,它应该是随机的

我有一台 NGINX 服务器用作 TCP 负载均衡器。它默认采用循环负载均衡,因此我的预期是,对于给定的客户端 IP,每次它们到达端点时,它们都会为每个请求获得不同的后端上游服务器。但实际情况是,它们每次都会获得相同的上游服务器,并且每次清楚的客户端 IP 正在获取一个不同的上游服务器。这很糟糕,因为我的客户端会产生大量流量,并且会造成热点,因为任何给定的客户端只能使用一个上游服务器。它似乎在多个上游服务器之间缓慢地轮换给定的客户端 IP;我再次希望它随机将每个请求分配给每个上游。

如何让 NGINX 随机分配上游服务器每次请求?我尝试了随机关键字,但没有任何效果。如能得到任何帮助,我将不胜感激。

user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;

# Load dynamic modules. See /usr/share/nginx/README.dynamic.
include /usr/share/nginx/modules/*.conf;

events {
    worker_connections 1024;
}

stream {

    upstream api_backend_http {
        server node1.mydomain.com:80;
        server node2.mydomain.com:80;
        server node6.mydomain.com:80;
        server node14.mydomain.com:80;
        server node18.mydomain.com:80;
        server node19.mydomain.com:80;
        server node21.mydomain.com:80;
        server node22.mydomain.com:80;
        server node24.mydomain.com:80;
    }

    upstream api_backend_https {
        server node1.mydomain.com:443;
        server node2.mydomain.com:443;
        server node6.mydomain.com:443;
        server node14.mydomain.com:443;
        server node18.mydomain.com:443;
        server node19.mydomain.com:443;
        server node21.mydomain.com:443;
        server node22.mydomain.com:443;
        server node24.mydomain.com:443;
    }

    server {
        listen            80;
        proxy_pass        api_backend_http;
        proxy_buffer_size 16k;
        proxy_connect_timeout 1s;
    }

    server {
        listen            443;
        proxy_pass        api_backend_https;
        proxy_buffer_size 16k;
        proxy_connect_timeout 1s;
    }

    
}

答案1

因为你应该停止使用 nginx 作为 TCP 负载均衡器对于其他 Web 服务器并将其切换为功能齐全的 HTTP 反向代理,事实确实如此。这样,您将获得所需的每个请求 RR(默认情况下禁用持久连接),而不是 TCP 会话分发。

相关内容