目录
5.2 使用 ngx_http_upstream_module 进行主动健康检查
一、背景
在当今的互联网架构中,高并发、高可用性已成为应用服务的标配。想象一下,一个成功的电商网站,在秒杀活动或节假日期间,每秒需要处理数十万甚至上百万的请求。如果所有这些请求都涌向单一的后端服务器,无论这台服务器的性能多么强悍,都难免会因为CPU、内存、I/O或网络带宽的瓶颈而崩溃,导致服务不可用,造成巨大的经济损失和品牌声誉损害。
负载均衡技术正是为了解决这一问题而生的。它的核心思想非常直观:将庞大的业务请求流量分摊到多个后端服务器上进行处理。

二、负载均衡的作用
1). 高并发:通过横向扩展,将负载分散,整个系统能够处理远超单机能力的用户请求。
2). 高可用性:当某台后端服务器发生故障时,负载均衡器能够自动将后续请求转发到其他健康的服务器,从而保证服务的持续性,对用户无感知。
3). 可伸缩性:当业务增长时,可以简单地通过增加后端服务器数量来线性提升系统的整体处理能力,实现平滑扩容。
在众多的负载均衡解决方案中,Nginx以其高性能、高稳定性和丰富的功能,成为了业界最受欢迎的反向代理与负载均衡软件之一。本篇博客将带领大家深入探讨在Linux服务器上,如何从零开始,一步步配置和优化Nginx,构建一个强大、可靠的负载均衡系统。
三、基础概念与准备工作
3.1 Nginx负载均衡的角色
在一个典型的负载均衡架构中,通常包含以下角色:
客户端:发起请求的用户或程序。
负载均衡器:即我们配置的Nginx服务器。它对外提供一个统一的访问入口(VIP或域名),并根据预设策略将请求分发出去。
后端服务器:实际处理业务逻辑的服务器集群,也称为Upstream Server或Real Server。它们通常运行着相同的应用代码,共享着会话状态或使用外部会话存储。
3.2 环境准备
在开始配置之前,请确保您拥有以下环境:
一台负载均衡服务器:安装Nginx,我们称之为 nginx-lb。
至少两台后端应用服务器:可以是Apache、Tomcat、Node.js、Gunicorn等任何Web应用服务器,我们称之为 app-server-1 和 app-server-2。
假设我们的IP地址规划如下:
nginx-lb: 192.168.1.10
app-server-1: 192.168.1.11
app-server-2: 192.168.1.12
所有服务器均使用CentOS 7/8 或 Ubuntu 18.04+ 等主流Linux发行版。
3.3 安装Nginx
在所有服务器上,我们使用包管理器安装Nginx。
在CentOS/RHEL上:
sudo yum install epel-release -y # CentOS 7 需要先安装EPEL仓库
sudo yum install nginx -y
sudo systemctl start nginx
sudo systemctl enable nginx
在Ubuntu/Debian上:
sudo apt update
sudo apt install nginx -y
sudo systemctl start nginx
sudo systemctl enable nginx
安装完成后,在后端服务器上,为了后续测试,可以修改默认的首页内容以作区分。例如,在 app-server-1 上,修改 /usr/share/nginx/html/index.html,加入 "Backend Server 1" 的标识。
四、核心配置详解
Nginx的负载均衡配置主要依赖于 upstream 模块和 proxy_pass 指令。
4.1 最基本的负载均衡配置
首先,我们登录到负载均衡服务器 nginx-lb,编辑其Nginx主配置文件,通常位于 /etc/nginx/nginx.conf 或者 /etc/nginx/conf.d/default.conf。我们更推荐在 /etc/nginx/conf.d/load-balancer.conf 创建一个新的配置文件。
# 定义一个名为 backend_servers 的上游服务器组
upstream backend_servers {
server 192.168.1.11:80; # 后端服务器1
server 192.168.1.12:80; # 后端服务器2
}
server {
listen 80; # 监听80端口
server_name _; # 匹配所有域名,也可替换为你的具体域名,如 www.yourdomain.com
location / {
# 将请求代理到上游服务器组
proxy_pass http://backend_servers;
# 以下是一些基础且重要的代理设置
proxy_set_header Host $host; # 将原始请求的Host头传递给后端
proxy_set_header X-Real-IP $remote_addr; # 传

1071

被折叠的 条评论
为什么被折叠?



