1.upstream

1.1.upstream语法

Syntax:  upstream name { ... }
Default:
Context:

备注解析

1.upstream  配置http作用域下面

1.2.配置样例

upstream backend {
server backend1.example.com weight=5;
server backend2.example.com;
server 127.0.0.1:8080 max_fails=3 fail_timeout=30s;
server backup1.example.com backup;
}

备注-解析

1.默认情况下,请求使用加权循环平衡方法在服务器之间分布。
2.每7个请求的分发如下:
2.1.五个请求进入backend1.example.com,
2.2.一个请求进入backend2.example.com
2.3.一个请求进入127.0.0.1:8080
2.4.如果在请求其中一个server时发生异常,会进入下一个server,直到所有的server都被重试
2.5.如果无法从任何服务器获得成功的响应,客户机将接收与最后一个服务器通信的结果。

2.server

nginx模块之ngx_http_upstream_module_服务器

2.1.概念

1.指定server的地址以及其他参数
2.地址可以指定为域名或者ip(或者带有端口,如果未指定端口,默认80)
3.其中server 指定的域名可以解析为多个IP地址的域名同时定义多个服务器。

2.2.server 属性

2.2.1.weight

1.设置server服务的权重,默认1

案例:

upstream backend {
server 127.0.0.1:8080 weight=2;
server 127.0.0.1:8081 weight=3;
server 127.0.0.1:8082 weight=5;
server 127.0.0.1:8083 ; # 默认相当于 weight=1;
}

解析

1.每进来(2+3+5+1)11个请求,会有
2个进入127.0.0.1:8080,
3个进入127.0.0.1:8081,
5个进入127.0.0.1:8082,
1个进入127.0.0.1:8083

2.2.2.max_conns

案例

upstream backend {
server 127.0.0.1:8080 max_conns=100;
server 127.0.0.1:8083 ; # 默认相当于 max_conns=0;
}

解析

1.设置限制与代理服务器同时活动的最大连接数;
2.默认max_conns的值为0,意味着没有限制;

2.2.3.max_fails

案例

upstream backend {
server 127.0.0.1:8080 max_fails=3 fail_timeout=30s;
server 127.0.0.1:8081; #默认 相当于max_fails=1
}

解析

1.设置请求server失败最大重试次数
2.与fail_timeout 属性组合使用
3.默认失败重试最大次数 1
4. server 127.0.0.1:8080 max_fails=3 fail_timeout=30s;
max_fails=3 fail_timeout=30s代表在30秒内请求某一应用失败3次, 认为该应用宕机,
后等待30秒,这期间内不会再把新请求发送到宕机应用,而是直接发到正常的那一台,
等待的这30秒时间到后再有请求进来继续尝试连接宕机应用且仅尝试1次,
如果还是失败,则继续等待30秒...以此循环,直到恢复。
5.

2.2.4.fail_timeout

样例

upstream backend {
server 127.0.0.1:8080 fail_timeout=10s;
server 127.0.0.1:8081; #默认 相当于fail_timeout=10s 10
}

解析

1.在指定的fail_timeout时间范围内,超过max_fails不成功的尝试次数,认为应用服务不可用;
2.fail_timeout属性与max_fails属性组合使用;

2.2.5.backup

upstream backend {
server 127.0.0.1:8080 fail_timeout=10s;
server 127.0.0.1:8081 back;
}
1.标示 该server为备份的server 当主要的server不可用时,会请求到备份server中
2.如上127.0.0.1:8080 不可用时,会请求到127.0.0.1:8081

2.2.6.down

upstream backend {
server 127.0.0.1:8080;
server 127.0.0.1:8081 down;
}

解析

1.标示该server 已经永久不可用,宕机

2.2.7.resolve

http {
resolver 10.0.0.1;

upstream u {
server example.com resolve;
}
}
1.主要用于DNS解析,与http模块下的resolver 组合使用

2.2.7.ip_hash

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

解析

1.指定组应使用负载平衡方法,其中基于客户端IP地址的请求在服务器之间分布。
2.客户端IPv4地址或整个IPv6地址的前三个八进制数用作哈希键。
3.该方法确保来自同一客户端的请求始终传递到同一服务器,除非该服务器不可用。
4.在后一种情况下,客户机请求将被传递到另一台服务器。
最有可能的是,它也将始终是相同的服务器

参考

​http://nginx.org/en/docs/http/ngx_http_upstream_module.html#upstream​