無涯教程網:Nginx Plus可以代理和負載平衡 TCP(傳輸控制協議)流量。TCP是許多流行的應用程序和服務的協議,例如MySQL,LDAP和RTMP。
同樣,Nginx Plus可以代理和負載均衡UDP流量。用戶數據報協議(UDP)是許多流行的非事務性應用程序(例如DNS,Syslog和RADIUS)的協議。
配置反向代理
首先,我們需要配置反向代理,以便Nginx開源或Nginx Plus可以將TCP連接或UDP數據報從客戶端轉發到upstream組或代理服務器。
使用Nginx配置文件並執行以下步驟:
1.創建一個stream{}塊。
stream { # ... }
2.在stream{} 上下文中爲每個虛擬服務器定義一個或多個server{}配置塊。
3.在server{}配置塊中,包括每個服務器的listen指令,以定義服務器監聽的IP地址或端口。
對於UDP流量,還添加 UDP 參數。由於TCP是流上下文的默認協議,因此沒有要監聽指令的TCP參數:
stream { server { listen 12345; # ... } server { listen 53 udp; # ... } # ... }
4.添加proxy pass指令以定義代理服務器或服務器將流量轉發到的upstream組:
stream { server { listen 12345; # traffic of TCP will be forwarded to the "stream_backend" upstream group proxy_pass stream_backend; } server { listen 12346; #traffic of TCP will be forwarded to the specified server proxy_pass backend.example.com:12346; } server { listen 53 udp; #traffic of UDP will be forwarded to the "dns_servers" upstream group proxy_pass dns_servers; } # ... }
5.如果代理服務器具有多個不同的網絡接口,則可以選擇將Nginx配置爲在連接到upstream服務器時使用特定的源IP地址。
添加proxy_bind指令和適當的網絡接口的IP地址。
stream { # ... server { listen 127.0.0.1:12345; proxy_pass backend.example.com:12345; proxy_bind 127.0.0.1:12345; } }
6.(可選)我們可以調整兩個內存緩衝區的大小,nginx可以在其中放置來自客戶端和upstream連接的數據。如果數據量少,則可以減少緩衝區,這樣可以節省內存資源。
如果有大量數據,則可以增加緩衝區的大小以減少套接字的讀寫操作次數。在一個連接上接收到數據後,Nginx將讀取該數據並通過另一連接轉發該數據。要控制緩衝區,請使用proxy_buffer_size指令:
stream { # ... server { listen 127.0.0.1:12345; proxy_pass backend.example.com:12345; proxy_buffer_size 16k; } }
配置TCP或UDP負載平衡
要配置TCP或UDP負載平衡:
1.首先,創建一組服務器或一個upstream組,其流量將進行負載均衡。在stream{}上下文中定義upstream{}的一個或多個配置塊,併爲upstream組設置名稱,例如,TCP服務器的 stream_backend 和 dns_servers 對於UDP服務器:
stream { upstream stream_backend { # ... } upstream dns_servers { # ... } # ... }
2.用upstream服務器填充upstream組。在upstream塊中,爲每個upstream服務器包括一個服務器指令,指定其主機名或IP地址以及一個必需的端口號。
stream { upstream stream_backend { server backend1.example.com:12345; server backend2.example.com:12345; server backend3.example.com:12346; # ... } upstream dns_servers { server 192.168.136.130:53; server 192.168.136.131:53; # ... } # ... }
3.配置upstream組使用的負載均衡方法。我們可以使用以下方法之一:
Round Robin - 默認情況下,Nginx使用Round Robin算法來負載均衡流量,並將其順序引導到已配置的upstream組中的服務器。由於輪詢是默認方法,因此沒有指令,只需在stream{}上下文中創建一個upstream{}配置塊幷包含服務器指令。
Least Connections - Nginx選擇當前活動連接數最少的服務器。
Least Time - 此方法僅適用於Nginx Plus。Nginx選擇具有最低平均延遲和最少活動連接數的服務器。參數爲:
-
connect - 連接upstream服務器的時間
-
first_byte - 數據接收到的第一個字節
-
last_byte - 是從服務器接收完整響應的時間。
upstream stream_backend { least_time first_byte; server backend1.example.com:12345; server backend2.example.com:12345; server backend3.example.com:12346; }
Hash - Nginx根據用戶定義的鍵選擇服務器,例如源IP地址($remote_addr)。
upstream stream_backend { hash $remote_addr; server backend1.example.com:12345; server backend2.example.com:12345; server backend3.example.com:12346; }
Random - 在這種情況下,每個連接都會傳遞到隨機選擇的服務器。如果指定了參數 two ,則首先Nginx考慮服務器權重隨機選擇兩個服務器,然後使用指定的服務器選擇其中一個服務器。
-
Least_conn - 活動連接數最少。
-
least_time = header - 從服務器接收響應標頭的最短平均時間。
-
Least_time = last_byte - 從服務器接收完整響應的最短平均時間。
upstream stream_backend { random two least_time=last_byte; server backend1.example.com:12345; server backend2.example.com:12345; server backend3.example.com:12346; server backend4.example.com:12346; }
4.(可選)爲每個upstream服務器定義服務器特定的參數,包括最大連接數,服務器權重等:
upstream stream_backend { hash $remote_addr consistent; server backend1.example.com:12345 weight=5; server backend2.example.com:12345; server backend3.example.com:12346 max_conns=3; } upstream dns_servers { least_conn; server 192.168.136.130:53; server 192.168.136.131:53; # ... }
TCP和UDP負載平衡配置示例
讓我們看一下TCP和UDP負載平衡配置的示例:
stream { upstream stream_backend { least_conn; server backend1.example.com:12345 weight=5; server backend2.example.com:12345 max_fails=2 fail_timeout=30s; server backend3.example.com:12345 max_conns=3; } upstream dns_servers { least_conn; server 192.168.136.130:53; server 192.168.136.131:53; server 192.168.136.132:53; } server { listen 12345; proxy_pass stream_backend; proxy_timeout 3s; proxy_connect_timeout 1s; } server { listen 53 udp; proxy_pass dns_servers; } server { listen 12346; proxy_pass backend4.example.com:12346; } }
在以上示例中,所有與TCP和UDP代理相關的功能都在流的塊內進行配置。
有兩個名爲upstream的塊,每個塊包含三個託管彼此相同內容的服務器。在每個服務器的server中,服務器名稱後跟必需的端口號。根據最小連接負載平衡方法,連接在所有服務器之間分配:連接到具有較少活動連接的服務器。
https://www.learnfk.com/article-nginx-tcp-and-udp-load-balancing