NGINX TCP 負載平衡在每個請求應該是隨機的時卻是 ip 黏性的

NGINX TCP 負載平衡在每個請求應該是隨機的時卻是 ip 黏性的

我有一個 NGINX 伺服器用作 TCP 負載平衡器。它預設為循環負載平衡,因此我的期望是,對於給定的客戶端 IP,每次到達端點時,它們都會為每個請求獲得不同的後端上游伺服器。但相反,發生的情況是他們每次都獲得相同的上游伺服器,並且每個清楚的客戶端 IP 正在取得不同的上游伺服器。這很糟糕,因為我的客戶端會產生大量流量,並且會導致熱點,因為任何給定的客戶端只能使用一台上游伺服器。它似乎在上游伺服器之間緩慢地輪換給定的客戶端 IP;我再次希望它將每個請求隨機分配給每個請求的上游。

如何讓 NGINX 隨機分配上游伺服器每個請求?我嘗試了 random 關鍵字,但沒有效果。任何幫助將不勝感激。

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 會話分配。

相關內容