Балансировка нагрузки TCP NGINX использует IP-привязку, хотя должна быть случайной, по запросу

Балансировка нагрузки TCP NGINX использует IP-привязку, хотя должна быть случайной, по запросу

У меня есть сервер NGINX, который используется в качестве балансировщика нагрузки TCP. По умолчанию используется балансировка нагрузки по принципу циклического перебора, поэтому я ожидаю, что для данного клиентского IP-адреса каждый раз, когда они попадают в конечную точку, они будут получать другой сервер backend upstream для каждого запроса. Но вместо этого они каждый раз получают один и тот же сервер upstream, и каждыйотчетливыйКлиентский IP получает отдельный сервер upstream. Это плохо, потому что мои клиенты генерируют много трафика, и это вызывает горячие точки, потому что любой клиент может использовать только один сервер upstream. Похоже, он медленно вращает заданный клиентский IP по серверам upstream; снова я хочу, чтобы он случайным образом назначал каждый запрос на upstream для каждого запроса.

Как заставить 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.для других веб-серверови переключить его на полноценный обратный HTTP-прокси, которым он и является. Таким образом, вы получите RR по запросу, который вам нужен (с отключенными по умолчанию постоянными соединениями), вместо распределения сеансов TCP.

Связанный контент