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

 更新时间:2017年08月31日 14:17:38   作者: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高可用配置实战教程之负载均衡 + 健康检查 + 动态扩展的文章就介绍到这了,更多相关Nginx高可用配置内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Nginx修改默认80端口(解决跟Tomcat的端口冲突)

    Nginx修改默认80端口(解决跟Tomcat的端口冲突)

    本文主要介绍了Nginx修改默认80端口(解决跟Tomcat的端口冲突),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-07-07
  • 详解Nginx配置文件

    详解Nginx配置文件

    Nginx是lgor Sysoev为俄罗斯访问量第二的rambler.ru站点设计开发的,Nginx功能丰富,可作为HTTP服务器,也可作为反向代理服务器,邮件服务器。这篇文章主要介绍了Nginx配置文件,需要的朋友参考下
    2017-01-01
  • Nginx与Tomcat之间的关系及说明

    Nginx与Tomcat之间的关系及说明

    Nginx和Tomcat在现代Web应用架构中扮演重要角色,Nginx主要负责处理HTTP请求、反向代理、负载均衡、SSL加密和静态资源服务,而Tomcat则专注于处理动态请求和运行JavaWeb应用,它们通过反向代理和负载均衡机制紧密合作,优化系统性能和扩展性,适用于高并发和大流量场景
    2025-02-02
  • nginx搭建高可用集群的实现方法

    nginx搭建高可用集群的实现方法

    本文主要介绍了nginx搭建高可用集群的实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-01-01
  • 使用Nginx解决跨域访问问题的完整案例

    使用Nginx解决跨域访问问题的完整案例

    在现代的Web开发中,跨域访问是一种常见的需求,由于浏览器的同源策略,不同域名之间的访问存在一定的限制,本文将介绍如何使用Nginx来解决跨域访问的问题,并通过一个完整的实例来展示,需要的朋友可以参考下
    2024-03-03
  • Windows环境下Nginx 服务器 SSL 证书安装部署操作过程

    Windows环境下Nginx 服务器 SSL 证书安装部署操作过程

    这篇文章主要介绍了Windows环境下Nginx 服务器 SSL 证书安装部署,指导您如何在Windows Nginx 服务器中安装 SSL 证书,本文给大家讲解的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-10-10
  • Nginx反向代理配置React前端与Python后端全过程

    Nginx反向代理配置React前端与Python后端全过程

    前后端分离项目里,前端通常是 React 打包后的静态资源,后端是 Python(FastAPI/Flask)提供的 API,生产环境一般用 Nginx 做统一入口,本文只讲 Nginx 反向代理的核心配置思路和关键片段,需要的朋友可以参考下
    2026-02-02
  • Nginx $remote_addr和$proxy_add_x_forwarded_for变量的实现

    Nginx $remote_addr和$proxy_add_x_forwarded_for变量的实现

    本文主要介绍了Nginx $remote_addr和$proxy_add_x_forwarded_for变量的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-08-08
  • nginx虚拟主机防webshell完美版

    nginx虚拟主机防webshell完美版

    nginx虚拟主机防webshell完美版,使用nginx的朋友可以参考下。
    2010-11-11
  • 在nginx中设置三级域名的方法示例

    在nginx中设置三级域名的方法示例

    这篇文章主要介绍了在nginx中设置三级域名的方法示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-12-12

最新评论