nginx

关注公众号 jb51net

关闭
首页 > 网站技巧 > 服务器 > nginx > Nginx高可用配置

Nginx高可用配置实战教程之负载均衡 + 健康检查 + 动态扩展

作者:IT小哥哥呀

本文通过电商商品服务集群的实战案例,详细介绍了从零搭建Nginx高可用架构的全过程,本文给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧

🚀 Nginx高可用配置实战:负载均衡 + 健康检查 + 动态扩展

一篇从零搭建到实测上线的高可用 Nginx 负载均衡案例教程。

🧭 一、背景与目标

在现代业务中,单台应用服务器往往无法承载高并发请求。
Nginx 作为轻量级高性能的反向代理服务器,能同时实现:

本文通过一个电商商品服务集群的实战项目,带你从零实现高可用 Nginx 架构。

🏗️ 二、项目架构设计

我们模拟一个商品服务集群(product service):

节点名称IP说明
app1192.168.10.101主节点
app2192.168.10.102副节点
app3192.168.10.103扩容节点
nginx-lb192.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_modulenginx-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.101up12ms
192.168.10.102down-
192.168.10.103up8ms

♻️ 五、实现动态扩展与热更新

当新增一台应用服务器时,只需修改 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 页面:

节点状态
app1up
app2❌ down
app3up

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高可用配置内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文