Nginx後端服務器組的配置


Nginx後端服務器組的配置

Nginx服務器支持設置一組服務器作為後端服務器,在學習Nginx服務器的反向代理、負載均衡等重要功能時會經常涉及後端服務器。

服務器組的設置包括幾個指令,它們是由標準HTTP模塊ngx_http_upstream_module進行解析和處理的。

1、upstream指令

該指令是設置後端服務器組的主要指令,其他的指令都在該指令中進行配置。upstream指令類似與之前提到的http塊、server塊,其語法結構為:

upstream name { ... }

其中,name是給後端服務器組起的組名。花括號中列出後端服務器組中包含的服務器,其中可以使用下面介紹的其他指令。

默認情況下,某個服務器組接收到請求後,按照輪叫調度(Round-Robin,RR)策略順序選擇組內服務器處理請求。如果一個服務器在處理請求的過程中出現錯誤,請求會被順次交給組內的下一個服務器進行處理,以此類推,直接返回正常響應。但如果所有的組內服務器都出錯,則返回最後一個服務器的處理結果。當然我們可以根據各個服務器處理能力或者資源配置情況的不同,給各個服務器配置不同的權重,讓能力強的服務器多處理請求,能力弱的少處理。配置權重的變量包含在server指令中。

2、server指令

該指令用於設置組內的服務器,其語法結構為:

server address [parameters];

address:服務器的地址,可以是包含端口號的IP地址(IP:Port)、域名或者以“unix:”為前綴用於進程間通信的Unix Domain Socket。

parameters:為當前服務器配置多屬性,這些屬性變量包括以下內容:

weight=number:為組內服務器設置權重,權重值高的服務器被優先用於處理請求。此時組內服務器的選擇策略為加權輪叫策略。組內所有服務器的權重默認設置為1,即採用一般輪叫調度原則處理請求。

max_fails=number:設置一個請求失敗的次數。在一定時間範圍內,當對組內某臺服務器請求失敗的次數超過該變量設置的值時,認為該服務器無效。默認設置為1。如果設置為0,則不使用上面的辦法檢查服務器是否有效。

fail_timeout=number:有兩個作用,一是設置max_fails指令嘗試請求某一組內服務器的時間,即學習max_fails指令時提到的“一定時間範圍內”;另一個作用是在檢查服務器是否有效時,如果一臺服務器被認定是無效的,該變量設置的時間為認為服務器無效的持續時間。在這個時間內不再檢查該服務器的狀態,並一直認為它是無效的。默認設置為10s。

backup:將某臺組內服務器標記為備用服務器,只有當正常的服務器處於無效狀態或者繁忙狀態時,該服務器才被用來處理客戶端請求。

down:將某臺組內服務器標記為永久的無效狀態,通常與ip_hash指令配合使用。

upstream backend

{

server backend1.example.com weight=5;

server 127.0.0.1:8080 max_fails=3 fail_timeout=30s;

server unix:/tmp/backend3;

}

3、ip_hash指令

該指令用於實現會話保持功能,將某個客戶端的多次請求定向到組內同一臺服務器上,保證客戶端與服務器之間建立穩定的會話。只有當該服務器處於無效狀態時,客戶端請求才會被下一個服務器接收和處理。其語法結構為:

ip_hash;

ip_hash技術在一些情況下非常有用,能夠避免我們關心的服務器組內各服務器之間會話共享的問題。但是ip_hash技術在實際使用過程中也有限制。

首先,ip_hash指令不能與server指令中的weight變量一起使用。其次,由於ip_hash技術主要根據客戶端IP地址分配服務器,因此在整個系統中,Nginx服務器應該是處於最前端的服務器,這樣才能獲取到客戶端的IP地址,否則它得到的IP地址將是位於它前面的服務器地址,從而會產生問題,同時要注意,客戶端IP地址必須是C類地址。

upstream backend

{

ip_hash;

server myback1.proxy.com;

server myback2.proxy.com;

}

4、keepalive指令

該指令用於控制網絡連接保持功能。通過該指令,能夠保證Nginx服務器的工作進程為服務器組打開一部分網絡連接,並且將數量控制在一定的範圍之內。其語法結構為:

keepalive connections;

其中,connections為Nginx服務器的每一個工作進程允許該服務器組保持的空閒網絡連接數的上限值。如果超過該值,工作進程將採用最近最少使用的策略關閉網絡連接。

5、least_conn指令

該指令用於配置Nginx服務器使用負載均衡策略為網絡連接分配服務器組內的服務器。該指令在功能上實現了最少連接負載均衡算法,在選擇組內的服務器時,考慮各服務器權重的同時,每次選擇的都是當前網絡連接最少的那臺服務器,如果這樣的服務器有多臺,就採用加權輪叫原則選擇權重最大的服務器。其語法結構為:

least_conn;


更多c/c++ Linux服務器高階知識、電子書籍、視頻等等請後臺私信【架構】獲取

文末給大家分享一波知識點有C/C++,Linux,golang技術,Nginx,ZeroMQ,MySQL,Redis,fastdfs,MongoDB,ZK,流媒體,CDN,P2P,K8S,Docker,TCP/IP,協程,DPDK等等。

Nginx後端服務器組的配置

Nginx後端服務器組的配置



分享到:


相關文章: