Nginx Upstream 详解


目录:

nginx通常对后端上游服务器的连接都为短连接,短连接在每次处理完请求之后都会将该请求的“Connection” Header设置为“close”,并关闭当前连接。所以短连接每次都需要重新发起握手并建立新的连接,这在高并发的情况下无疑会加大服务器的响应时长与资源消耗,此时就可以通过Upstream配置长连接,让nginx在转发完成一个请求之后保持该连接,以待后续请求继续使用。

1. 轮询

upstream默认的分配方式为轮询,即接收到请求时按照时间顺序将该请求分配到不同的后端upstream服务器,如果nginx检测到某个后端upstream服务器down掉了,就会将该后端剔除,具体的检测机制和恢复机制后面会将。

例:

upstream server {
    server 192.168.1.1:80;
    server 192.168.1.2:80;
}

2. weight(权重)

upstream可以设置每个server的轮询权重,即轮询的几率。weight和被使用的几率成正比,即weight设置的值越大,该server越容易被使用。

例:

upstream server {
    server 192.168.1.1 weight=1;
    server 192.168.1.2 weight=2;
    server 192.168.1.3 weight=3;
}

3. ip_hash

根据每个访问来源的IPv4地址的前三位或者整个IPv6地址生成哈希,然后将该值绑定值某个server,确保每个访问客户端只访问到一个server,除非该server不可用。

如果希望暂时移除掉某个server,可以将该server设置为down,以保存与该server绑定的客户端的哈希值。

upstream backend {
    ip_hash;

    server backend1.example.com;
    server backend2.example.com;
    server backend3.example.com down;
    server backend4.example.com;
}