当前位置: 首页 > news >正文

Nginx负载均衡集群实验步骤

本实验基于 “1 台 Nginx 代理服务器 + 2 台后端 Web 服务器” 架构,实现基础负载均衡功能(以轮询策略为例),适用于 Linux 环境(如 CentOS 7/8、Ubuntu)。

一、实验环境准备

1. 服务器规划

先明确 3 台服务器的角色、IP 及所需软件,避免配置混乱:

角色IP 地址(示例)核心软件作用
负载均衡器192.168.1.10Nginx(需启用负载模块)接收用户请求,分发到后端
后端 Web 服务器 1192.168.1.11Nginx/Apache/Tomcat实际处理请求,返回页面
后端 Web 服务器 2192.168.1.12Nginx/Apache/Tomcat与后端 1 功能一致,实现冗余

2. 基础环境检查

所有服务器需完成以下操作,确保网络和权限正常:

  • 关闭防火墙(实验环境简化,生产环境需配置端口放行):
    CentOS:systemctl stop firewalld && systemctl disable firewalld
    Ubuntu:ufw disable
  • 关闭 SELinux(避免拦截 Nginx 请求):
    临时关闭:setenforce 0
    永久关闭:编辑 /etc/selinux/config,将 SELINUX=enforcing 改为 SELINUX=disabled(需重启生效)
  • 测试网络互通:在负载均衡器上 ping 两台后端服务器,确保能通:
    ping 192.168.1.11 -c 3ping 192.168.1.12 -c 3

二、部署后端 Web 服务器(2 台操作相同)

后端服务器只需提供 “可访问的 Web 页面” 即可,此处以 Nginx 为例(Apache 操作类似,最后需配置测试页面)。

1. 安装 Nginx

  • CentOS:
    先安装 EPEL 源:yum install epel-release -y
    再装 Nginx:yum install nginx -y
  • Ubuntu:
    更新源:apt update
    装 Nginx:apt install nginx -y

2. 配置 “差异化测试页面”

为了后续验证 “负载均衡是否生效”,需给两台后端服务器配置不同内容的首页(方便区分请求分发到哪台):

  • 后端 1(192.168.1.11):
    echo "<h1>Backend Server 1 (192.168.1.11)</h1>" > /usr/share/nginx/html/index.html
  • 后端 2(192.168.1.12):
    echo "<h1>Backend Server 2 (192.168.1.12)</h1>" > /usr/share/nginx/html/index.html

3. 启动并验证后端服务

  • 启动 Nginx:systemctl start nginx && systemctl enable nginx
  • 本地验证:在后端服务器上执行 curl localhost,应显示对应服务器的测试页面(如后端 1 显示 “Backend Server 1”);
  • 跨机验证:在负载均衡器上执行 curl 192.168.1.11 和 curl 192.168.1.12,确保能获取到后端页面(排除网络或服务故障)。

三、部署负载均衡器(192.168.1.10)

核心是通过 Nginx 的 upstream 模块配置后端服务器集群,实现负载分发。

1. 安装 Nginx

操作与 “后端服务器安装 Nginx” 一致(CentOS 用 yum,Ubuntu 用 apt)。

2. 配置负载均衡规则

编辑 Nginx 主配置文件 /etc/nginx/nginx.conf(或在 /etc/nginx/conf.d/ 下新建 loadbalance.conf,推荐后者,避免修改主配置):

步骤 1:备份原配置(避免出错无法恢复)

cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bak

步骤 2:编辑配置文件

用 vim 打开配置文件:vim /etc/nginx/nginx.conf
在 http { ... } 块内添加以下内容(关键是 upstream 集群定义和 proxy_pass 转发):

http {# 1. 定义后端服务器集群(名称可自定义,如 backend_servers)upstream backend_servers {# 轮询策略(默认,无需额外配置),添加两台后端服务器IPserver 192.168.1.11:80;  # 后端1,80为Web服务端口server 192.168.1.12:80;  # 后端2# 可选:添加权重(如 server 192.168.1.11:80 weight=2; 表示请求占比2/3)}# 2. 配置虚拟主机,接收用户请求并转发到集群server {listen 80;  # 负载均衡器监听80端口(用户访问的端口)server_name localhost;  # 实验用localhost,生产用域名# 所有请求(/)转发到后端集群location / {proxy_pass http://backend_servers;  # 指向上面定义的集群名称# 可选:添加代理请求头(让后端获取真实客户端IP等信息)proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;}}
}
步骤 3:检查配置语法(关键!避免启动失败)

nginx -t
若显示 nginx: configuration file /etc/nginx/nginx.conf test is successful,说明配置无语法错误;若报错,需根据提示修正(如 IP 写错、括号不匹配)。

3. 启动负载均衡器 Nginx

systemctl start nginx && systemctl enable nginx

四、验证负载均衡效果

通过 “多次访问负载均衡器 IP”,观察页面是否在两台后端服务器之间切换,验证轮询策略是否生效。

1. 客户端验证(推荐)

在 Windows/macOS 客户端(需与服务器同网段)打开浏览器,输入负载均衡器 IP http://192.168.1.10刷新页面多次

  • 第一次刷新:显示 “Backend Server 1 (192.168.1.11)”
  • 第二次刷新:显示 “Backend Server 2 (192.168.1.12)”
  • 第三次刷新:回到 “Backend Server 1”
    (若配置了权重,会按权重比例切换,如权重 2:1 时,2 次 1 台、1 次另一台)

2. 命令行验证(更精准)

在任意服务器(或客户端)执行 curl http://192.168.1.10 多次,观察输出结果:

# 第一次执行
curl http://192.168.1.10
<h1>Backend Server 1 (192.168.1.11)</h1># 第二次执行
curl http://192.168.1.10
<h1>Backend Server 2 (192.168.1.12)</h1>

五、可选:测试后端服务器容错性

负载均衡的核心优势之一是 “后端故障时自动剔除”,可手动停止一台后端服务器,验证请求是否仅分发到正常服务器:

  1. 在后端 1(192.168.1.11)上停止 Nginx:systemctl stop nginx
  2. 再次访问 http://192.168.1.10(多次刷新),此时所有请求均会分发到后端 2(192.168.1.12),不会出现 “502 错误”;
  3. 恢复后端 1:systemctl start nginx,刷新页面,请求会重新在两台后端之间轮询。

六、常见问题排查

  1. 访问负载均衡器 IP 显示 “502 Bad Gateway”

    • 检查后端服务器是否启动:systemctl status nginx(后端服务器上执行);
    • 检查负载均衡器能否 ping 通后端:ping 192.168.1.11
    • 检查 Nginx 配置中 upstream 的 IP 和端口是否正确(如后端用 8080 端口,需写 server 192.168.1.11:8080)。
  2. 刷新页面始终显示同一后端

    • 检查是否配置了 “会话保持”(如 ip_hash 策略,实验用轮询需删除该配置);
    • 浏览器可能缓存页面,建议用 “无痕模式” 或命令行 curl 验证。
  3. nginx -t 报错 “unknown directive”

    • 检查配置文件的括号是否匹配(如 upstream { ... } 少了右括号);
    • 检查指令拼写(如 proxy_pass 写成 proxy_passs)。

文章转载自:

http://sYCs5ESl.qtbnm.cn
http://csCwE1yy.qtbnm.cn
http://sPnGRNAl.qtbnm.cn
http://MK9mtXr1.qtbnm.cn
http://Ffc9mwEO.qtbnm.cn
http://LEarAl4V.qtbnm.cn
http://B9az6PLa.qtbnm.cn
http://uvUGPBte.qtbnm.cn
http://BQRH3oy6.qtbnm.cn
http://BQT4JSKA.qtbnm.cn
http://LqPaHmWG.qtbnm.cn
http://cQz9rnEs.qtbnm.cn
http://zfEAYOCY.qtbnm.cn
http://ISWhfKYi.qtbnm.cn
http://Qpa4ZxiO.qtbnm.cn
http://pDzGnkCo.qtbnm.cn
http://fAeZeqXU.qtbnm.cn
http://2KLsklTp.qtbnm.cn
http://xn9ozNp9.qtbnm.cn
http://mG8tA434.qtbnm.cn
http://wQRa4Nco.qtbnm.cn
http://LjQSslB3.qtbnm.cn
http://iTtBpJTY.qtbnm.cn
http://aHhSNnUL.qtbnm.cn
http://E0h4EW9B.qtbnm.cn
http://ZEjTZy85.qtbnm.cn
http://FruBPuyD.qtbnm.cn
http://WuZL24IQ.qtbnm.cn
http://tdTnbArp.qtbnm.cn
http://rt5rE6TL.qtbnm.cn
http://www.dtcms.com/a/384138.html

相关文章:

  • 从go语言出发,搭建多语言云原生场景下全链路观测体系
  • 9.13 9.15 JavaWeb(事务管理、AOP P172-P182)
  • 九、vue3后台项目系列——tag标签逻辑
  • 数据结构入门指南:计算机专业核心课精要
  • 贪心算法应用:DNS缓存问题详解
  • Python爬虫实战——使用NetNut网页解锁器获取亚马逊电商数据
  • 知识管理新范式——cpolar+Wiki.js打造企业级分布式知识库
  • NGUI--游戏登录、注册和服务器选择系统​​
  • C++ std::vector
  • 知微集:Transformer
  • 大数据毕业设计选题推荐-基于大数据的客户购物订单数据分析与可视化系统-Hadoop-Spark-数据可视化-BigData
  • C# JPG转PDF实现方案
  • 单变量单步时序预测 | TCN-BiLSTM时间卷积结合长短期记忆神经网络(MATLAB)
  • uniapp scroll-view 设置scrollTop无效
  • Day24_【深度学习(2)—PyTorch框架安装】
  • 未来汽车电气/电子(E/E)架构——迈向全新电气/电子范式之路上的复杂性掌控
  • 【Linux手册】mmap 接口:内存映射实现高效 IO 的
  • 如何使用代理 IP 实现爬虫代理
  • Ubuntu 录制 gif
  • Day24_【深度学习(3)—PyTorch使用—张量的创建和类型转换】
  • IP-Prefix 配置核心要点与典型应用场景
  • 为什么企业需要高防IP
  • 通过 DNS 解析SCAN IP
  • 网络:TCP/IP协议
  • 【后端】数据库四大范式详细解析
  • 银河麒麟部署mysql8.0并连接应用
  • Mysql中有那些锁
  • React 状态管理(手写实现react-redux)
  • C++:类和对象(下)
  • 智能驾驶再加速:L4 级 AI 系统落地难点与城市试点经验总结