
Eu tenho um servidor NGINX sendo usado como balanceador de carga TCP. O padrão é o balanceamento de carga round-robin, então minha expectativa é que, para um determinado IP do cliente, toda vez que eles atingirem o endpoint, eles obtenham um servidor upstream de back-end diferente para cada solicitação. Mas, em vez disso, o que está acontecendo é que eles sempre obtêm o mesmo servidor upstream, e cadadistintoo IP do cliente está obtendo um servidor upstream distinto. Isso é ruim porque meus clientes geram muito tráfego e estão causando pontos de acesso porque qualquer cliente pode utilizar apenas um servidor upstream. Parece girar lentamente um determinado IP do cliente nos servidores upstream; novamente, quero atribuir aleatoriamente cada solicitação a um upstream por solicitação.
Como posso fazer com que o NGINX atribua aleatoriamente o servidor upstream paracada pedido? Tentei a palavra-chave aleatória e não teve efeito. Qualquer ajuda seria muito apreciada.
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;
}
}
Responder1
Porque você deve parar de usar o nginx como balanceador de carga TCPpara outros servidores Webe mude-o para um proxy reverso HTTP completo, o que é. Dessa forma, você obterá o RR por solicitação, que deseja (com conexões persistentes desativadas por padrão), em vez da distribuição da sessão TCP.