Nginx upstream模块指令用法详解

20 min read

Nginx upstream模块是一个非常强大的模块,它可以根据某些条件把请求分配给不同的后端服务器。这一模块提供了一系列的指令,用于配置upstream的一些行为和参数,下面我们来详细介绍这些指令的使用方法。

  1. upstream

upstream指令用于定义upstream的名称及包含的服务器列表。语法如下:

upstream upstream_name {
server server1 [parameters];
server server2 [parameters];
...
}

其中,upstream_name是upstream的名称,server1、server2是包含的服务器列表,[parameters]是可选的附加参数,用于设置服务器的一些属性。例如:

upstream backend {
server backend1.example.com weight=5;
server backend2.example.com;
server backend3.example.com max_fails=3 fail_timeout=30s;
}

上面的配置定义了一个名为backend的upstream,其中包括三个服务器backend1.example.com、backend2.example.com和backend3.example.com。其中,backend1.example.com设置了权重为5,backend3.example.com设置了最大失败数为3,失败超时时间为30秒。

  1. server

server指令用于定义upstream中包含的服务器列表及其属性。语法如下:

server address [parameters];

其中,address是服务器的地址和端口,parameters是可选的附加参数,用于设置服务器的一些属性。例如:

server backend1.example.com weight=5;

上面的配置定义了一个地址为backend1.example.com的服务器,其权重为5。

  1. weight

weight参数用于设置服务器的权重,即分配给该服务器的请求比例。默认值为1。例如:

server backend1.example.com weight=5;

上面的配置设置了服务器backend1.example.com的权重为5,表示分配给该服务器的请求比例是其他服务器的5倍。

  1. max_fails

max_fails参数用于设置服务器在一次检测周期内最大的失败次数。默认值为1。例如:

server backend3.example.com max_fails=3;

上面的配置设置了服务器backend3.example.com在一次检测周期内最大的失败次数为3。

  1. fail_timeout

fail_timeout参数用于设置服务器在一次检测周期内失败后的超时时间。默认值为10秒。例如:

server backend3.example.com fail_timeout=30s;

上面的配置设置了服务器backend3.example.com在一次检测周期内失败后的超时时间为30秒。

  1. backup

backup参数用于设置服务器为备用服务器,当所有非备用服务器都不可用时,备用服务器会被使用。例如:

server backend1.example.com backup;

上面的配置设置了服务器backend1.example.com为备用服务器。

  1. down

down参数用于设置服务器为禁用状态,即不会分配请求给该服务器,并且当非禁用服务器都不可用时,该服务器也不会被使用。例如:

server backend2.example.com down;

上面的配置设置了服务器backend2.example.com为禁用状态。

  1. keepalive

keepalive参数用于设置向后端服务器发送请求时是否使用keepalive连接。默认值为on。例如:

upstream backend {
server backend1.example.com keepalive=on;
server backend2.example.com keepalive=off;
}

上面的配置设置了向服务器backend1.example.com发送请求时使用keepalive连接,向服务器backend2.example.com发送请求时不使用keepalive连接。

  1. zone

zone参数用于定义共享内存zone的名称和大小。用于存储upstream的状态信息,主要用于负载均衡算法。例如:

upstream backend {
zone backend_zone 64k;
server backend1.example.com;
server backend2.example.com;
}

上面的配置定义了一个名为backend_zone的共享内存zone,大小为64k。这一共享内存zone用于存储upstream的状态信息。

  1. hash

hash指令用于设置哈希负载均衡算法。每个请求会根据某个key值被分配到不同的服务器上。语法如下:

upstream backend {
hash $request_uri;
server backend1.example.com;
server backend2.example.com;
}

上面的配置设置了哈希负载均衡算法,key为$request_uri,即请求的URI。根据该key值,每个请求会被分配到相同的服务器上。

  1. ip_hash

ip_hash指令用于根据客户端IP地址进行哈希负载均衡。每个客户端会被分配到同一个服务器上。例如:

upstream backend {
ip_hash;
server backend1.example.com;
server backend2.example.com;
}

上面的配置使用ip_hash指令进行哈希负载均衡,每个客户端会被分配到相同的服务器上。

  1. least_conn

least_conn指令用于使用最小连接数负载均衡算法,即将连接数最少的服务器分配请求。例如:

upstream backend {
least_conn;
server backend1.example.com;
server backend2.example.com;
}

上面的配置使用least_conn指令进行最小连接数负载均衡,每个请求会被分配到连接数最少的服务器上。

  1. fair

fair指令用于使用公平负载均衡算法,即每个服务器被分配相同数量的请求。例如:

upstream backend {
fair;
server backend1.example.com;
server backend2.example.com;
}

上面的配置使用fair指令进行公平负载均衡,每个服务器被分配相同数量的请求。

总结

上述就是常用的upstream模块指令用法,这些指令可以用于配置upstream的各种属性和行为,以实现不同的负载均衡算法和管理方式。在实际使用过程中,可以根据实际需求进行配置和调整,以达到更好的效果。