本文详细介绍关于Nginx 配置负载均衡,包括配置文件结构、多种负载均衡策略、如何修改均衡策略以及其他一些重要的配置。
本文目录
-
- [一、、Nginx 配置负载均衡](#一、、Nginx 配置负载均衡)
-
- [1. 配置文件结构](#1. 配置文件结构)
- [二、Nginx 负载均衡策略](#二、Nginx 负载均衡策略)
-
- [1. 轮询(`默认策略`)](#1. 轮询(
默认策略
)) - [2. 加权轮询](#2. 加权轮询)
- [3. IP 哈希](#3. IP 哈希)
- [4. 最少连接](#4. 最少连接)
- [1. 轮询(`默认策略`)](#1. 轮询(
- 三、修改负载均衡策略
- [四、Nginx 负载均衡其他配置](#四、Nginx 负载均衡其他配置)
-
- [1. 健康检查](#1. 健康检查)
- [2. 会话保持](#2. 会话保持)
- [3. 超时设置](#3. 超时设置)
一、、Nginx 配置负载均衡
1. 配置文件结构
Nginx 的负载均衡配置主要在 http
块内的 upstream
指令和 server
块内的 proxy_pass
指令中完成。
配置示例如下:
nginx
http {
upstream backend_servers { # 后端服务器组
server 192.168.1.100:8080;
server 192.168.1.101:8080;
}
server {
listen 80;
server_name ecommerce.com;
location / {
proxy_pass http://backend_servers; # 将客户端的请求转发到指定的后端服务器组
proxy_set_header Host $host;
proxy_set_header X - Real - IP $remote_addr; # 设置请求头信息,确保后端服务器能获取客户端的真实信息。
}
}
}
二、Nginx 负载均衡策略
1. 轮询(默认策略
)
Nginx 按照顺序依次将请求分发
到后端服务器,每个服务器轮流处理请求。例如,第一个请求发送到 192.168.1.100:8080
,第二个请求发送到 192.168.1.101:8080
,以此类推。
nginx
upstream backend_servers {
server 192.168.1.100:8080;
server 192.168.1.101:8080;
}
2. 加权轮询
为每个后端服务器分配一个权重,权重越高的服务器处理的请求越多
。在系统中,如果某台服务器的性能较好,可以为其分配较高的权重。
nginx
upstream backend_servers {
server 192.168.1.100:8080 weight=2;
server 192.168.1.101:8080 weight=1;
}
3. IP 哈希
根据客户端的 IP 地址进行哈希计算,将相同 IP 地址
的请求总是发送到同一台后端服务器。这种策略适用于需要保持会话状态
的场景,如系统中的用户登录状态。
nginx
upstream backend_servers {
ip_hash;
server 192.168.1.100:8080;
server 192.168.1.101:8080;
}
4. 最少连接
将请求发送到当前连接数
最少的后端服务器,以确保各服务器的负载相对均衡。
nginx
upstream backend_servers {
least_conn;
server 192.168.1.100:8080;
server 192.168.1.101:8080;
}
三、修改负载均衡策略
如果需要修改负载均衡策略,只需在 upstream
块中修改相应的指令。
将轮询策略改为加权轮询:
nginx
upstream backend_servers {
# 原轮询策略
# server 192.168.1.100:8080;
# server 192.168.1.101:8080;
# 修改为加权轮询策略
server 192.168.1.100:8080 weight=3;
server 192.168.1.101:8080 weight=1;
}
修改完成后,需要重新加载 Nginx 配置文件:
bash
sudo nginx -s reload
四、Nginx 负载均衡其他配置
1. 健康检查
可以通过 server
指令的 max_fails
和 fail_timeout
参数进行健康检查。当后端服务器在 fail_timeout
时间内出现 max_fails
次失败请求时,Nginx 会认为该服务器不可用,暂时不再向其发送请求。
nginx
upstream backend_servers {
server 192.168.1.100:8080 max_fails=3 fail_timeout=10s;
server 192.168.1.101:8080 max_fails=3 fail_timeout=10s;
}
2. 会话保持
在需要保持会话状态的系统中,可以使用 sticky
模块实现会话保持。例如,使用 sticky cookie
方式:
nginx
upstream backend_servers {
sticky cookie srv_id expires=1h domain=ecommerce.com path=/;
server 192.168.1.100:8080;
server 192.168.1.101:8080;
}
3. 超时设置
可以通过 proxy_connect_timeout
、proxy_send_timeout
和 proxy_read_timeout
等指令设置连接超时、发送超时和读取超时时间,避免长时间等待无响应的后端服务器。
nginx
server {
listen 80;
server_name ecommerce.example.com;
location / {
proxy_pass http://backend_servers;
proxy_connect_timeout 5s;
proxy_send_timeout 10s;
proxy_read_timeout 10s;
}
}
|---------------------------------------------------------------------------------------------------|--------------------|--------------------------------------------------------------------------------------------------|
| ← 上一篇 MySQL------表添加索引多种方式 | 记得点赞、关注、收藏哦! | 下一篇 JUC小册------公平锁和非公平锁 → |