你是否遇到過這樣的情況:當你的網站訪問量突然增加時,單個服務器可能會因爲負載過高而變慢甚至崩潰?這時候,負載均衡就能派上用場了。簡單來說,負載均衡就是把用戶的請求“分攤”到多臺服務器上處理,避免某一臺服務器壓力過大,從而提升系統的整體性能和穩定性。

Nginx 作爲一款高性能的 Web 服務器和反向代理工具,自帶了強大的負載均衡模塊,能輕鬆實現多服務器分流。接下來,我們用最簡單的方式,一步步教你配置 Nginx 負載均衡。

一、負載均衡前的準備工作

在開始配置前,你需要先準備以下東西:

  1. 至少兩臺後端服務器:這些服務器需要運行相同的服務(比如都部署了你的 Web 應用),並且能正常響應請求。假設我們有兩臺服務器,IP 分別是 192.168.1.100:8080192.168.1.101:8080(端口可根據實際情況修改)。
  2. 安裝 Nginx:如果你的服務器還沒安裝 Nginx,可以參考官方文檔快速安裝。比如在 Ubuntu 系統中:
   sudo apt update
   sudo apt install nginx

(CentOS 系統用 sudo yum install nginx,其他系統參考Nginx 官方安裝指南
3. 確保後端服務器可訪問:檢查後端服務器的防火牆是否開放了對應的端口(比如 8080),並且能通過瀏覽器直接訪問(例如訪問 http://192.168.1.100:8080 能看到應用頁面)。

二、Nginx 負載均衡的核心配置

Nginx 負載均衡的配置分爲兩步:定義後端服務器組和代理請求到服務器組。

1. 定義後端服務器組(upstream 模塊)

在 Nginx 的主配置文件(通常是 /etc/nginx/nginx.conf/etc/nginx/conf.d/default.conf)中,添加一個 upstream 塊,用來列出後端服務器並設置負載策略:

http {
    # 定義後端服務器組,名稱自定義(例如 my_server_group)
    upstream my_server_group {
        # 最簡單的輪詢策略:請求按順序分配到後端服務器
        server 192.168.1.100:8080;
        server 192.168.1.101:8080;

        # (可選)加權輪詢:權重越高,分配到的請求越多
        # server 192.168.1.100:8080 weight=2;  # 權重 2,會比另一臺多分配 2 倍請求
        # server 192.168.1.101:8080 weight=1;

        # (可選)健康檢查:後端服務器故障後自動跳過
        # server 192.168.1.100:8080 max_fails=2 fail_timeout=10s;
        # max_fails:允許失敗次數(默認 1),超過後標記爲故障
        # fail_timeout:故障後重試等待時間(默認 10s)
    }

    # 其他 Nginx 配置...
}

2. 配置代理到後端服務器組

在 Nginx 的 server 塊中,配置反向代理,將用戶請求代理到剛纔定義的 upstream 組:

server {
    listen 80;  # Nginx 監聽的端口(通常用 80 或 443)
    server_name localhost;  # 你的域名或服務器 IP

    location / {
        proxy_pass http://my_server_group;  # 代理到後端服務器組
        proxy_set_header Host $host;        # 傳遞客戶端請求的主機名
        proxy_set_header X-Real-IP $remote_addr;  # 傳遞客戶端真實 IP
    }
}

關鍵說明
- proxy_pass:必須指向 upstream 塊的名稱(如 http://my_server_group),而不是直接寫後端服務器 IP。
- proxy_set_header:傳遞客戶端信息到後端服務器,避免後端服務器獲取不到真實的客戶端 IP 和 Host。

三、驗證配置是否生效

配置完成後,按以下步驟驗證:

  1. 檢查配置語法:在終端執行 nginx -t,如果顯示 syntax is oktest is successful,說明配置語法正確。
  2. 重啓 Nginx:執行 nginx -s reload(或 systemctl restart nginx)讓配置生效。
  3. 測試負載均衡
    - 打開瀏覽器,訪問 http://Nginx服務器IP(比如 Nginx 服務器的公網/內網 IP)。
    - 多次刷新頁面,觀察頁面內容是否來自不同的後端服務器(例如後端服務器返回的頁面可能包含其自身 IP,或不同的內容)。
    - 也可在後端服務器上查看日誌,比如 tail -f /var/log/後端服務器日誌,確認請求是否被正確分發。

四、常見問題與解決方法

  1. 後端服務器無響應:檢查後端服務器是否運行、端口是否開放、防火牆是否攔截請求。
  2. Nginx 啓動失敗:用 nginx -t 檢查配置錯誤,或查看 Nginx 錯誤日誌(/var/log/nginx/error.log)。
  3. 所有請求發往一臺服務器:確認 upstream 塊定義了多臺服務器,且配置無語法錯誤。
  4. 後端服務器故障後仍有請求:配置 max_failsfail_timeout(如 max_fails=2 fail_timeout=10s),Nginx 會自動跳過故障服務器。

五、進階:其他負載均衡策略

除了基礎輪詢,Nginx 還支持以下策略(按需選擇):

  • IP 哈希:根據客戶端 IP 固定分配到同一臺後端服務器(適合會話保持)。
  upstream my_server_group {
      ip_hash;  # 添加此行啓用 IP 哈希
      server 192.168.1.100:8080;
      server 192.168.1.101:8080;
  }
  • URL 哈希:根據請求 URL 分配服務器(需安裝 ngx_http_upstream_hash_module 模塊)。

通過以上步驟,你已經成功實現了 Nginx 負載均衡,讓多臺服務器分擔流量壓力。後續可根據需求調整權重、添加 HTTPS 或配置更復雜的健康檢查,進一步提升系統穩定性。

小夜