Nginx高可用配置實戰(zhàn)教程之負(fù)載均衡?+?健康檢查?+?動態(tài)擴(kuò)展
?? Nginx高可用配置實戰(zhàn):負(fù)載均衡 + 健康檢查 + 動態(tài)擴(kuò)展
一篇從零搭建到實測上線的高可用 Nginx 負(fù)載均衡案例教程。
?? 一、背景與目標(biāo)
在現(xiàn)代業(yè)務(wù)中,單臺應(yīng)用服務(wù)器往往無法承載高并發(fā)請求。
Nginx 作為輕量級高性能的反向代理服務(wù)器,能同時實現(xiàn):
- ? 負(fù)載均衡(分擔(dān)后端壓力)
- ? 健康檢查(自動移除異常節(jié)點)
- ? 動態(tài)擴(kuò)展(不重啟即更新配置)
本文通過一個電商商品服務(wù)集群的實戰(zhàn)項目,帶你從零實現(xiàn)高可用 Nginx 架構(gòu)。

??? 二、項目架構(gòu)設(shè)計
我們模擬一個商品服務(wù)集群(product service):
| 節(jié)點名稱 | IP | 說明 |
|---|---|---|
| app1 | 192.168.10.101 | 主節(jié)點 |
| app2 | 192.168.10.102 | 副節(jié)點 |
| app3 | 192.168.10.103 | 擴(kuò)容節(jié)點 |
| nginx-lb | 192.168.10.10 | 負(fù)載均衡代理服務(wù)器 |
請求流程如下:
Client → Nginx (負(fù)載均衡+健康檢查)
↓
┌───────────────┬───────────────┬───────────────┐
│ App1 │ App2 │ App3 │
│ 商品服務(wù)節(jié)點1 │ 商品服務(wù)節(jié)點2 │ 商品服務(wù)節(jié)點3 │
└───────────────┴───────────────┴───────────────┘?? 三、負(fù)載均衡基礎(chǔ)配置
1?? 安裝 Nginx
sudo apt update sudo apt install nginx -y
查看版本:
nginx -v
2?? 配置 upstream 實現(xiàn)負(fù)載均衡
編輯 /etc/nginx/conf.d/loadbalance.conf:
upstream product_cluster {
# 輪詢策略(默認(rèn))
server 192.168.10.101:8080 max_fails=3 fail_timeout=10s;
server 192.168.10.102:8080 max_fails=3 fail_timeout=10s;
server 192.168.10.103:8080 max_fails=3 fail_timeout=10s backup;
}
server {
listen 80;
server_name product.demo.local;
location / {
proxy_pass http://product_cluster;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}?? 輪詢模式默認(rèn)自動分配請求
??max_fails:健康檢查失敗次數(shù)閾值
??backup:備用節(jié)點,僅主節(jié)點失效時啟用
保存后測試:
nginx -t systemctl reload nginx
?? 四、加入健康檢查模塊
Nginx 開源版不自帶健康檢查模塊,我們可通過 ngx_http_upstream_check_module 或 nginx-plus 實現(xiàn)。
實戰(zhàn)方案(使用 openresty)
如果使用 OpenResty (推薦):
sudo apt install openresty -y
配置文件 /usr/local/openresty/nginx/conf/nginx.conf:
http {
upstream product_cluster {
server 192.168.10.101:8080;
server 192.168.10.102:8080;
check interval=5000 rise=2 fall=5 timeout=3000 type=http;
check_http_send "HEAD /health HTTP/1.0\r\n\r\n";
check_http_expect_alive http_2xx http_3xx;
}
server {
listen 80;
location / {
proxy_pass http://product_cluster;
}
location /status {
check_status;
access_log off;
allow 192.168.10.0/24;
deny all;
}
}
}訪問 http://nginx-lb/status 可以實時看到健康狀態(tài):
| IP | 狀態(tài) | 延遲 |
|---|---|---|
| 192.168.10.101 | up | 12ms |
| 192.168.10.102 | down | - |
| 192.168.10.103 | up | 8ms |
?? 五、實現(xiàn)動態(tài)擴(kuò)展與熱更新
當(dāng)新增一臺應(yīng)用服務(wù)器時,只需修改 upstream 段:
upstream product_cluster {
include /etc/nginx/upstreams/*.conf;
}然后在 /etc/nginx/upstreams/ 目錄中增加或刪除節(jié)點配置文件:
echo "server 192.168.10.104:8080;" > /etc/nginx/upstreams/node4.conf
無需重啟,僅需平滑加載:
nginx -s reload
?? 這樣 Nginx 就能動態(tài)感知新節(jié)點加入!
?? 六、日志分析與請求分布監(jiān)控
打開訪問日志:
/var/log/nginx/access.log
內(nèi)容示例:
192.168.10.201 - - [05/Nov/2025:14:32:01 +0800] "GET /api/product/1001 HTTP/1.1" 200 524 "-" "Mozilla" upstream_addr=192.168.10.101:8080 192.168.10.201 - - [05/Nov/2025:14:32:02 +0800] "GET /api/product/1002 HTTP/1.1" 200 530 "-" "Mozilla" upstream_addr=192.168.10.102:8080
我們可以統(tǒng)計各節(jié)點命中率:
awk '{print $NF}' /var/log/nginx/access.log | sort | uniq -c | sort -nr
輸出:
240 192.168.10.101:8080
235 192.168.10.102:8080
225 192.168.10.103:8080
通過 Grafana + Loki,還能將這些日志實時可視化。
?? 七、實戰(zhàn)驗證
模擬異常場景:
sudo systemctl stop product-service@192.168.10.102
訪問 /status 頁面:
| 節(jié)點 | 狀態(tài) |
|---|---|
| app1 | up |
| app2 | ? down |
| app3 | up |
Nginx 自動將 app2 從負(fù)載池中移除,保持服務(wù)不中斷。
恢復(fù)服務(wù)后再次上線:
sudo systemctl start product-service@192.168.10.102
狀態(tài)自動恢復(fù)為 “up”。
?? 八、性能與高可用總結(jié)
| 功能 | 技術(shù)點 | 說明 |
|---|---|---|
| 負(fù)載均衡 | upstream 輪詢 | 均衡分配請求 |
| 健康檢查 | openresty check 模塊 | 自動移除異常節(jié)點 |
| 動態(tài)擴(kuò)展 | include + reload | 實現(xiàn)節(jié)點熱更新 |
| 監(jiān)控分析 | 日志統(tǒng)計 + Grafana | 實時監(jiān)控請求分布 |
?? 九、項目實戰(zhàn)結(jié)構(gòu)目錄
/etc/nginx/ ├── conf.d/ │ └── loadbalance.conf ├── upstreams/ │ ├── node1.conf │ ├── node2.conf │ └── node3.conf ├── logs/ │ └── access.log └── nginx.conf
?? 十、總結(jié)與思考
通過本次實戰(zhàn),我們實現(xiàn)了:
- ? 從零搭建 Nginx 負(fù)載均衡集群
- ? 健康檢測與節(jié)點自動剔除
- ? 動態(tài)擴(kuò)展不影響業(yè)務(wù)
- ? 日志實時分析請求命中率
這套方案非常適合中小企業(yè)、內(nèi)部微服務(wù)架構(gòu)、測試環(huán)境或生產(chǎn)高可用場景。
到此這篇關(guān)于Nginx高可用配置實戰(zhàn)教程之負(fù)載均衡 + 健康檢查 + 動態(tài)擴(kuò)展的文章就介紹到這了,更多相關(guān)Nginx高可用配置內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Nginx修改默認(rèn)80端口(解決跟Tomcat的端口沖突)
本文主要介紹了Nginx修改默認(rèn)80端口(解決跟Tomcat的端口沖突),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-07-07
Windows環(huán)境下Nginx?服務(wù)器?SSL?證書安裝部署操作過程
這篇文章主要介紹了Windows環(huán)境下Nginx?服務(wù)器?SSL?證書安裝部署,指導(dǎo)您如何在Windows Nginx 服務(wù)器中安裝 SSL 證書,本文給大家講解的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-10-10
Nginx反向代理配置React前端與Python后端全過程
前后端分離項目里,前端通常是 React 打包后的靜態(tài)資源,后端是 Python(FastAPI/Flask)提供的 API,生產(chǎn)環(huán)境一般用 Nginx 做統(tǒng)一入口,本文只講 Nginx 反向代理的核心配置思路和關(guān)鍵片段,需要的朋友可以參考下2026-02-02
Nginx $remote_addr和$proxy_add_x_forwarded_for變量的實現(xiàn)
本文主要介紹了Nginx $remote_addr和$proxy_add_x_forwarded_for變量的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2024-08-08

