Nginx 負載均衡可以通過多種方式實現,以下是幾種常見的方法:
輪詢是最簡單的負載均衡算法,Nginx 會按順序將請求分發到后端服務器。
http {
upstream backend {
server backend1.example.com;
server backend2.example.com;
server backend3.example.com;
}
server {
listen 80;
location / {
proxy_pass http://backend;
}
}
}
加權輪詢允許為每個后端服務器分配不同的權重,權重高的服務器會處理更多的請求。
http {
upstream backend {
server backend1.example.com weight=3;
server backend2.example.com weight=2;
server backend3.example.com weight=1;
}
server {
listen 80;
location / {
proxy_pass http://backend;
}
}
}
IP Hash 根據客戶端的 IP 地址進行哈希計算,確保來自同一客戶端的請求總是被分發到同一臺后端服務器。
http {
upstream backend {
ip_hash;
server backend1.example.com;
server backend2.example.com;
server backend3.example.com;
}
server {
listen 80;
location / {
proxy_pass http://backend;
}
}
}
最少連接算法將請求分發到當前連接數最少的后端服務器。
http {
upstream backend {
least_conn;
server backend1.example.com;
server backend2.example.com;
server backend3.example.com;
}
server {
listen 80;
location / {
proxy_pass http://backend;
}
}
}
URL Hash 根據請求的 URL 進行哈希計算,確保相同的 URL 總是被分發到同一臺后端服務器。
http {
upstream backend {
hash $request_uri consistent;
server backend1.example.com;
server backend2.example.com;
server backend3.example.com;
}
server {
listen 80;
location / {
proxy_pass http://backend;
}
}
}
Nginx 允許通過自定義模塊來實現更復雜的負載均衡算法。
以下是一個綜合了多種負載均衡算法的配置示例:
http {
upstream backend {
server backend1.example.com weight=3;
server backend2.example.com weight=2;
server backend3.example.com weight=1;
ip_hash;
least_conn;
}
server {
listen 80;
location / {
proxy_pass http://backend;
}
}
}
health_check
模塊。sticky
指令。通過以上方法,可以根據具體需求選擇合適的負載均衡策略,提高系統的可用性和性能。