如果你的网站使用Nginx,一定很熟悉nginx配置吧,其中最常修改的莫过于
location
,但是还有个非常重要的模块就是upstream
,今天就根据自己配置的经验及整理的资料做一总结。
Nginx 的 upstream
模块是负载均衡的核心组件,用于定义和管理后端服务器集群,实现请求分发、故障转移和高可用性。以下从核心功能、配置策略、高级特性及实际应用场景展开详解:
1 核心功能与基础配置
在 nginx.conf
配置文件中,server
模块通过 proxy_pass
将特定的请求负载均衡到不同服务器上,简单配置及示意图如下。
upstream backend {
# 负载均衡策略
least_conn;
# 主服务器配置
server 192.168.1.101 weight=3 max_fails=2 fail_timeout=30s max_conns=200;
server 192.168.1.102 weight=2 slow_start=60s;
# ...其他配置
}
server {
listen 80;
location / {
proxy_pass http://backend;
proxy_set_header Host $host;
}
}
1.1 定义服务器集群
upstream
块用于声明一组后端服务器(即上游服务器),支持域名、IP、端口及UNIX域套接字。
示例:
http {
upstream backend {
server backend1.example.com:8080 weight=3;
server 192.168.1.102 max_fails=2 fail_timeout=30s;
server unix:/tmp/backend.sock backup;
}
}
weight
:权重控制请求分配比例(如权重3:2)。backup
:标记为备用服务器,主节点失效时启用。max_fails
和fail_timeout
:定义健康检查阈值(如30秒内失败2次则标记为不可用)。
1.2 负载均衡策略
Nginx 支持多种负载均衡策略,其配置灵活且适用于不同场景。以下是主流策略及其配置方法:
1.2.1 轮询(Round Robin)
- 原理:按请求顺序依次分发到后端服务器,默认策略。
- 适用场景:服务器性能相近,无状态服务(如静态资源分发)。
upstream backend {
server 192.168.1.101;
server 192.168.1.102;
}
1.2.2 加权轮询(Weighted Round Robin)
- 原理:根据权重分配请求,权重越高分配的请求越多。
- 适用场景:服务器性能不均(如高配置机器权重设为3,低配设为1)。
upstream backend {
server 192.168.1.101 weight=3; # 处理约60%的请求
server 192.168.1.102 weight=2; # 处理约40%的请求
}
1.2.3 IP哈希(IP Hash)
- 原理:根据客户端IP的哈希值固定分配到同一服务器。
- 适用场景:需保持会话一致性的场景(如登录状态、购物车)。
upstream backend {
ip_hash;
server 192.168.1.101;
server 192.168.1.102;
}