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)。
相关推荐
獭.獭.3 小时前
Linux -- 信号【上】
linux·运维·服务器
hashiqimiya3 小时前
centos配置环境变量jdk
linux·运维·centos
路由侠内网穿透4 小时前
本地部署 GPS 跟踪系统 Traccar 并实现外部访问
运维·服务器·网络·windows·tcp/ip
傻傻虎虎6 小时前
【Docker】常用帮忙、镜像、容器、其他命令合集(2)
运维·docker·容器
ZERO_pan7 小时前
服务器装机遇到的问题
运维·服务器
杀气丶7 小时前
Linux下运行芙蕾雅天堂2【俄文简译L2FATER】
运维·服务器·天堂2·l2fater·l2fater.cn
太空的旅行者8 小时前
告别双系统——WSL2+UBUNTU在WIN上畅游LINUX
linux·运维·ubuntu
九章云极AladdinEdu9 小时前
超参数自动化调优指南:Optuna vs. Ray Tune 对比评测
运维·人工智能·深度学习·ai·自动化·gpu算力
人工智能训练师10 小时前
Ubuntu22.04如何安装新版本的Node.js和npm
linux·运维·前端·人工智能·ubuntu·npm·node.js