###1.分发方式Nginx的upstream支持5种分发方式,下面会详细介绍。其中,前三种是Nginx原生支持的分发方式,后两种是第二种。三方支持的分配方式:###1.轮询轮询是upstream默认的分配方式,即每个请求按时间顺序依次分配给不同的后端服务器。如果后端服务器出现故障,它可以自动删除。上游后端{服务器192.168.1.101:8888;服务器192.168.1.102:8888;server192.168.1.103:8888;}###2.权重轮询增强版,即可以指定轮询比例,权重与访问概率成正比,主要用于后端服务器不多的场景异质。上游后端{服务器192.168.1.101权重=1;服务器192.168.1.102权重=2;server192.168.1.103weight=3;}###3.ip_hash的每次请求访问,根据ip(即Nginx的IP前端服务器或客户端)hash结果分布,这样每个访问者都会访问一个后端服务器fixed,可以解决session的一致性问题。上游后端{ip_hash;服务器192.168.1.101:7777;服务器192.168.1.102:8888;server192.168.1.103:9999;}###4.fairfair,顾名思义,根据后端服务器的响应时间(rt)公平分配请求,响应时间短的后端服务器,也就是小rt,首先分配请求。上游后端{服务器192.168.1.101;服务器192.168.1.102;服务器192.168.1.103;fair;}###5.url_hash类似于ip_hash,但是根据访问url的hash结果来分发请求,使得每个url都指向同一个后端服务器,主要用在后端的场景服务器是缓存。上游后端{服务器192.168.1.101;服务器192.168.1.102;服务器192.168.1.103;散列$request_uri;hash_methodcrc32;}其中hash_method是使用的hash算法。需要注意的是:此时不能在server语句参数中添加weight等。###2.设备状态从上面的例子不难看出,upstream中server命令的语法如下:serveraddress[parameters]必须选择关键字server。address也是必须的,可以是主机名,域名,ip或者unixsocket,也可以指定端口号。parameters为可选参数,可以是以下参数:down:表示当前服务器已被禁用backup:表示当前服务器为备份服务器,仅当其他非备份后端服务器挂掉或非常忙时,该请求将被分配。weight:表示当前服务器负载权重,权重越大,被请求的概率越大。默认为1。max_fails和fail_timeout一般配合使用。如果一台服务器在fail_timeout时间内有max_fails次连接失败,Nginx会认为自己挂了,所以不会在fail_timeout时间内请求它。fail_timeout默认为10s,max_fails默认为1,即默认只要出错就认为服务器宕机。如果max_fails设置为0,则表示取消此检查。示例如下:upstreambackend{serverbackend1.example.comweight=5;服务器127.0.0.1:8080max_fails=3fail_timeout=30s;服务器unix:/tmp/backend3;}
