这里主要用到upstream这个指令,该指令需要ngx_http_upstream_module模块的支持,这个模块主要用于定义一组供proxy_pass等指令使用的服务器
upstream语法为: upstream tagname { }
Nginx的负载均衡模式主要是以下几种:
1、轮询模式
按时间顺序逐一分配到不同的后端服务器,如后端服务器down掉能自动剔除。
upstream backend {
server 192.168.1.100:9527;
server 192.168.1.101:9527;
server 192.168.1.102:9527;
}
2、Weight权重模式
指定轮询几率,weight越大权重越大,被分配到的几率也越大。
upstream backend {
server 192.168.1.100:9527 weight=1;
server 192.168.1.101:9527 weight=2;
server 192.168.1.102:9527 weight=3;
}
3、IP_HASH模式
根据访问者ip的hash结果进行分配,这样可以保证同一访客始终访问固定的后端服务器,适合要求session共享的场景。
upstream backend {
ip_hash;
server 192.168.1.100:9527;
server 192.168.1.101:9527;
server 192.168.1.102:9527;
}
另外两种模式是URL_HASH模式和FAIR模式,不过这两种都是第三方模式。一般上面前两种模式就能满足我们大部分需求了
我们可以为服务器组里的每台服务器其定义相关状态,除了上面用到的weight,还包括以下几个状态:
down : 表示该服务器部参与负载;
weight : 默认为1,值越大负载的权重就越大;
max_fails : 允许请求失败的最大次数,超过最大次数时返回prox_next_upstream模块定义的错误;
fail_timeout : max_fails次失败后,暂停的时间;
backup : 其它所有非backup机器down或者忙的时候,分配backup机器,实际使用并不是要主server完全down掉才分配backup,而是主server无法完成请求,比如相关文件在主server没找到但主server并没有down掉时也会分配到backup机器。
Nginx支持同时设置多组负载均衡,用来给不同的server使用。
在http块内定义好以上的某种或某几种模式以后就可以在需要的server块内进行使用了:
server {
#######other directives######
location / {
proxy_pass http://backend;
}
}