我有一台 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 会话分发。