Nginx upstream模块是一个非常强大的模块,它可以根据某些条件把请求分配给不同的后端服务器。这一模块提供了一系列的指令,用于配置upstream的一些行为和参数,下面我们来详细介绍这些指令的使用方法。
- 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秒。
- server
server指令用于定义upstream中包含的服务器列表及其属性。语法如下:
server address [parameters];
其中,address是服务器的地址和端口,parameters是可选的附加参数,用于设置服务器的一些属性。例如:
server backend1.example.com weight=5;
上面的配置定义了一个地址为backend1.example.com的服务器,其权重为5。
- weight
weight参数用于设置服务器的权重,即分配给该服务器的请求比例。默认值为1。例如:
server backend1.example.com weight=5;
上面的配置设置了服务器backend1.example.com的权重为5,表示分配给该服务器的请求比例是其他服务器的5倍。
- max_fails
max_fails参数用于设置服务器在一次检测周期内最大的失败次数。默认值为1。例如:
server backend3.example.com max_fails=3;
上面的配置设置了服务器backend3.example.com在一次检测周期内最大的失败次数为3。
- fail_timeout
fail_timeout参数用于设置服务器在一次检测周期内失败后的超时时间。默认值为10秒。例如:
server backend3.example.com fail_timeout=30s;
上面的配置设置了服务器backend3.example.com在一次检测周期内失败后的超时时间为30秒。
- backup
backup参数用于设置服务器为备用服务器,当所有非备用服务器都不可用时,备用服务器会被使用。例如:
server backend1.example.com backup;
上面的配置设置了服务器backend1.example.com为备用服务器。
- down
down参数用于设置服务器为禁用状态,即不会分配请求给该服务器,并且当非禁用服务器都不可用时,该服务器也不会被使用。例如:
server backend2.example.com down;
上面的配置设置了服务器backend2.example.com为禁用状态。
- 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连接。
- zone
zone参数用于定义共享内存zone的名称和大小。用于存储upstream的状态信息,主要用于负载均衡算法。例如:
upstream backend {
zone backend_zone 64k;
server backend1.example.com;
server backend2.example.com;
}
上面的配置定义了一个名为backend_zone的共享内存zone,大小为64k。这一共享内存zone用于存储upstream的状态信息。
- hash
hash指令用于设置哈希负载均衡算法。每个请求会根据某个key值被分配到不同的服务器上。语法如下:
upstream backend {
hash $request_uri;
server backend1.example.com;
server backend2.example.com;
}
上面的配置设置了哈希负载均衡算法,key为$request_uri,即请求的URI。根据该key值,每个请求会被分配到相同的服务器上。
- ip_hash
ip_hash指令用于根据客户端IP地址进行哈希负载均衡。每个客户端会被分配到同一个服务器上。例如:
upstream backend {
ip_hash;
server backend1.example.com;
server backend2.example.com;
}
上面的配置使用ip_hash指令进行哈希负载均衡,每个客户端会被分配到相同的服务器上。
- least_conn
least_conn指令用于使用最小连接数负载均衡算法,即将连接数最少的服务器分配请求。例如:
upstream backend {
least_conn;
server backend1.example.com;
server backend2.example.com;
}
上面的配置使用least_conn指令进行最小连接数负载均衡,每个请求会被分配到连接数最少的服务器上。
- fair
fair指令用于使用公平负载均衡算法,即每个服务器被分配相同数量的请求。例如:
upstream backend {
fair;
server backend1.example.com;
server backend2.example.com;
}
上面的配置使用fair指令进行公平负载均衡,每个服务器被分配相同数量的请求。
总结
上述就是常用的upstream模块指令用法,这些指令可以用于配置upstream的各种属性和行为,以实现不同的负载均衡算法和管理方式。在实际使用过程中,可以根据实际需求进行配置和调整,以达到更好的效果。