Nginx负载均衡集群实验步骤

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

一、实验环境准备

1. 服务器规划

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

角色 IP 地址(示例) 核心软件 作用
负载均衡器 192.168.1.10 Nginx(需启用负载模块) 接收用户请求,分发到后端
后端 Web 服务器 1 192.168.1.11 Nginx/Apache/Tomcat 实际处理请求,返回页面
后端 Web 服务器 2 192.168.1.12 Nginx/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.11curl 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 {
        # 轮询策略(默认,无需额外配置),添加两台后端服务器IP
        server 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)。
相关推荐
七夜zippoe2 小时前
CANN Runtime任务描述序列化与持久化源码深度解码
大数据·运维·服务器·cann
Fcy6483 小时前
Linux下 进程(一)(冯诺依曼体系、操作系统、进程基本概念与基本操作)
linux·运维·服务器·进程
袁袁袁袁满3 小时前
Linux怎么查看最新下载的文件
linux·运维·服务器
代码游侠4 小时前
学习笔记——设备树基础
linux·运维·开发语言·单片机·算法
主机哥哥4 小时前
阿里云OpenClaw部署全攻略,五种方案助你快速部署!
服务器·阿里云·负载均衡
Harvey9034 小时前
通过 Helm 部署 Nginx 应用的完整标准化步骤
linux·运维·nginx·k8s
珠海西格电力科技5 小时前
微电网能量平衡理论的实现条件在不同场景下有哪些差异?
运维·服务器·网络·人工智能·云计算·智慧城市
释怀不想释怀5 小时前
Linux环境变量
linux·运维·服务器
zzzsde5 小时前
【Linux】进程(4):进程优先级&&调度队列
linux·运维·服务器
聆风吟º7 小时前
CANN开源项目实战指南:使用oam-tools构建自动化故障诊断与运维可观测性体系
运维·开源·自动化·cann