你是否遇到過這樣的情況:當你的網站訪問量突然增加時,單個服務器可能會因爲負載過高而變慢甚至崩潰?這時候,負載均衡就能派上用場了。簡單來說,負載均衡就是把用戶的請求“分攤”到多臺服務器上處理,避免某一臺服務器壓力過大,從而提升系統的整體性能和穩定性。
Nginx 作爲一款高性能的 Web 服務器和反向代理工具,自帶了強大的負載均衡模塊,能輕鬆實現多服務器分流。接下來,我們用最簡單的方式,一步步教你配置 Nginx 負載均衡。
一、負載均衡前的準備工作¶
在開始配置前,你需要先準備以下東西:
- 至少兩臺後端服務器:這些服務器需要運行相同的服務(比如都部署了你的 Web 應用),並且能正常響應請求。假設我們有兩臺服務器,IP 分別是
192.168.1.100:8080和192.168.1.101:8080(端口可根據實際情況修改)。 - 安裝 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。
三、驗證配置是否生效¶
配置完成後,按以下步驟驗證:
- 檢查配置語法:在終端執行
nginx -t,如果顯示syntax is ok和test is successful,說明配置語法正確。 - 重啓 Nginx:執行
nginx -s reload(或systemctl restart nginx)讓配置生效。 - 測試負載均衡:
- 打開瀏覽器,訪問http://Nginx服務器IP(比如 Nginx 服務器的公網/內網 IP)。
- 多次刷新頁面,觀察頁面內容是否來自不同的後端服務器(例如後端服務器返回的頁面可能包含其自身 IP,或不同的內容)。
- 也可在後端服務器上查看日誌,比如tail -f /var/log/後端服務器日誌,確認請求是否被正確分發。
四、常見問題與解決方法¶
- 後端服務器無響應:檢查後端服務器是否運行、端口是否開放、防火牆是否攔截請求。
- Nginx 啓動失敗:用
nginx -t檢查配置錯誤,或查看 Nginx 錯誤日誌(/var/log/nginx/error.log)。 - 所有請求發往一臺服務器:確認
upstream塊定義了多臺服務器,且配置無語法錯誤。 - 後端服務器故障後仍有請求:配置
max_fails和fail_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 或配置更復雜的健康檢查,進一步提升系統穩定性。