Nginx高可用配置实战:负载均衡 + 健康检查 + 动态扩展
🚀 Nginx高可用配置实战:负载均衡 + 健康检查 + 动态扩展
一篇从零搭建到实测上线的高可用 Nginx 负载均衡案例教程。
🧭 一、背景与目标
在现代业务中,单台应用服务器往往无法承载高并发请求。
Nginx 作为轻量级高性能的反向代理服务器,能同时实现:
- ✅ 负载均衡(分担后端压力)
- ✅ 健康检查(自动移除异常节点)
- ✅ 动态扩展(不重启即更新配置)
本文通过一个电商商品服务集群的实战项目,带你从零实现高可用 Nginx 架构。

🏗️ 二、项目架构设计
我们模拟一个商品服务集群(product service):
| 节点名称 | IP | 说明 |
|---|---|---|
| app1 | 192.168.10.101 | 主节点 |
| app2 | 192.168.10.102 | 副节点 |
| app3 | 192.168.10.103 | 扩容节点 |
| nginx-lb | 192.168.10.10 | 负载均衡代理服务器 |
请求流程如下:
Client → Nginx (负载均衡+健康检查)↓┌───────────────┬───────────────┬───────────────┐│ App1 │ App2 │ App3 ││ 商品服务节点1 │ 商品服务节点2 │ 商品服务节点3 │└───────────────┴───────────────┴───────────────┘
⚙️ 三、负载均衡基础配置
1️⃣ 安装 Nginx
sudo apt update
sudo apt install nginx -y
查看版本:
nginx -v
2️⃣ 配置 upstream 实现负载均衡
编辑 /etc/nginx/conf.d/loadbalance.conf:
upstream product_cluster {# 轮询策略(默认)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;}
}
🔹 轮询模式默认自动分配请求
🔹max_fails:健康检查失败次数阈值
🔹backup:备用节点,仅主节点失效时启用
保存后测试:
nginx -t
systemctl reload nginx
🩺 四、加入健康检查模块
Nginx 开源版不自带健康检查模块,我们可通过 ngx_http_upstream_check_module 或 nginx-plus 实现。
实战方案(使用 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 可以实时看到健康状态:
| IP | 状态 | 延迟 |
|---|---|---|
| 192.168.10.101 | up | 12ms |
| 192.168.10.102 | down | - |
| 192.168.10.103 | up | 8ms |
♻️ 五、实现动态扩展与热更新
当新增一台应用服务器时,只需修改 upstream 段:
upstream product_cluster {include /etc/nginx/upstreams/*.conf;
}
然后在 /etc/nginx/upstreams/ 目录中增加或删除节点配置文件:
echo "server 192.168.10.104:8080;" > /etc/nginx/upstreams/node4.conf
无需重启,仅需平滑加载:
nginx -s reload
👉 这样 Nginx 就能动态感知新节点加入!
📊 六、日志分析与请求分布监控
打开访问日志:
/var/log/nginx/access.log
内容示例:
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
我们可以统计各节点命中率:
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,还能将这些日志实时可视化。
🔍 七、实战验证
模拟异常场景:
sudo systemctl stop product-service@192.168.10.102
访问 /status 页面:
| 节点 | 状态 |
|---|---|
| app1 | up |
| app2 | ❌ down |
| app3 | up |
Nginx 自动将 app2 从负载池中移除,保持服务不中断。
恢复服务后再次上线:
sudo systemctl start product-service@192.168.10.102
状态自动恢复为 “up”。
🧩 八、性能与高可用总结
| 功能 | 技术点 | 说明 |
|---|---|---|
| 负载均衡 | upstream 轮询 | 均衡分配请求 |
| 健康检查 | openresty check 模块 | 自动移除异常节点 |
| 动态扩展 | include + reload | 实现节点热更新 |
| 监控分析 | 日志统计 + Grafana | 实时监控请求分布 |
🔖 九、项目实战结构目录
/etc/nginx/├── conf.d/│ └── loadbalance.conf├── upstreams/│ ├── node1.conf│ ├── node2.conf│ └── node3.conf├── logs/│ └── access.log└── nginx.conf
🧠 十、总结与思考
通过本次实战,我们实现了:
- ✅ 从零搭建 Nginx 负载均衡集群
- ✅ 健康检测与节点自动剔除
- ✅ 动态扩展不影响业务
- ✅ 日志实时分析请求命中率
这套方案非常适合中小企业、内部微服务架构、测试环境或生产高可用场景。
💬 互动
💡 你在生产环境中遇到过 Nginx 负载不均或节点故障的问题吗?
留言告诉我你最想了解的高可用方案,下篇文章我写“Keepalived + Nginx 双主高可用集群”实战。
