Skip to content

建立 2026-09-15 更新 2026-09-15

負載平衡(Upstream)

當一台後端伺服器不足以應付流量,或需要避免單點故障時,可以用 upstream 定義一組後端伺服器,讓 Nginx 把請求分散給它們處理,這就是負載平衡(load balancing)。

upstream 基本語法

upstream backend_app {
    server 10.0.0.11:3000;
    server 10.0.0.12:3000;
    server 10.0.0.13:3000;
}

server {
    listen 80;
    server_name app.example.com;

    location / {
        proxy_pass http://backend_app;
    }
}

只要把 反向代理設定proxy_pass 的目標,從單一位址換成 upstream 的名稱,Nginx 就會依照演算法把請求分配到群組中的伺服器。

常見的分配演算法

演算法 設定方式 說明
Round Robin 預設,不需額外設定 依序輪流分配給每一台伺服器
Weighted Round Robin server 10.0.0.11 weight=3; 依權重比例分配,數字越大分到的請求越多,適合機器規格不同時使用
Least Connections least_conn; 優先分配給目前連線數最少的伺服器
IP Hash ip_hash; 依客戶端 IP 計算固定分配到同一台伺服器,適合需要 session 黏著(session persistence)的場景
upstream backend_app {
    least_conn;
    server 10.0.0.11:3000;
    server 10.0.0.12:3000 weight=2;
}

健康檢查與備援伺服器

開源版 Nginx 內建的是被動式健康檢查:只有在實際轉發請求失敗時才會標記伺服器異常,並非持續主動探測。

upstream backend_app {
    server 10.0.0.11:3000 max_fails=3 fail_timeout=30s;
    server 10.0.0.12:3000 max_fails=3 fail_timeout=30s;
    server 10.0.0.13:3000 backup;
}
  • max_fails / fail_timeout:在 fail_timeout 秒內失敗達 max_fails 次,就會暫時把該伺服器標記為不可用,暫停一段時間再重試。
  • backup:只有在其他伺服器都無法使用時,才會把流量轉發給標記為 backup 的伺服器。

若需要主動、週期性地探測後端健康狀態(active health check),這是商業版 NGINX Plus 才提供的功能;開源版通常會另外搭配外部監控或應用層的健康檢查機制來補足。