在 Nginx 中,上游服务可以通过 server 指令声明其 IP 地址或者域名,并通过 upstream 块指令定义为一组。这一组 server 中,将使用同一种负载均衡算法,从请求信息(比如 HTTP Header 或者 IP Header)或者上游服务状态(比如 TCP 并发连接数)中计算出请求的路由
upstream 模块用于定义后端服务器的集群。upstream 模块可以接受一些参数,以配置集群的行为和负载均衡策略 (默认是轮询策略)

以下是一些常用的 upstream 参数:
-
ip_hash:使用客户端 IP 地址进行负载均衡,确保同一个客户端的请求始终被发送到同一台后端服务器。如果这个节点挂了,那么就顺延到下一个机器 -
least_conn:根据当前连接数选择连接数最少的后端服务器。 -
weight:设置后端服务器的权重,用于分配负载。值越高,被选中的概率越大。 -
backup:将后端服务器定义为备份服务器。只有在其他所有主服务器不可用时才会将请求转发到备份服务器。 -
max_fails和fail_timeout:用于定义故障转移。max_fails定义了在多少次连续失败后将后端服务器标记为不可用,fail_timeout定义了标记为不可用后的暂停时间。 -
keepalive:启用或禁用与后端服务器的 keepalive 连接。
upstream FR.com {
#max_fails=n fail_timeout=m 表示m时间内超时n次失败尝试,将会在接下来m时间内标记此节点不可用(m时间过后无论此节点是否启动都会被重新标记为可用状态)
#其中fails为“失败尝试”,失败尝试由下面server配置中,proxy_next_upstream指令定义
server 127.0.0.1:8060 max_fails=15 fail_timeout=300s;
server 127.0.0.1:8061 max_fails=15 fail_timeout=300s;
keepalive 300;
#其他server参数说明:
#down 标记服务器挂掉
#backup 备份服务器,当主服务器(例如上面的95和96)不可用时才加入服务器;
#weight=number 权重,默认为1
#内置负载均衡策略有ip hash、轮询、加权轮询(设置server的weight值)
ip_hash;
}http {
upstream my_cluster {
server backend1.example.com weight=2;
server backend2.example.com weight=3;
server backend3.example.com weight=1;
}
}http {
upstream my_cluster {
server backend1.example.com;
server backend2.example.com;
server backend3.example.com backup;
}
}