
У меня есть сервер 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.