Syntax: upstream name { ... }
Default: —
Context: http
Example:
upstream backend {
server backend1.example.com weight=5;
server 127.0.0.1:8080 max_fails=3 fail_timeout=30s;
server unix:/tmp/backend3;
server backup1.example.com backup;
}
示例:
(1)修改nginx的配置文件,在http部分定义upstream
【注意】:因为如果后端主机与nginx主机监听端口相同可以不写端口,否则需要指明后端主机的监听端口。
在location的proxy_pass部分调用
重载之后就可以看到负载均衡效果了
设置权重:
后端健康状态检测:被动检测
解释:检查2次失败则认为后端服务器出故障,每次检查的超时时长为1m
fail_timeout=1m
默认为10s
down掉server6上的httpd再访问
设置“sorry server“:
使用到backup
参数
当server6和server7在线时请求并不会调度到server9上
只有当server6和server7都挂了,请求才会到server9
nginx的调度方式:
1、默认为轮循
2、ip_hash模式:
相当与lvs的sh算法,ip_hash技术能够将某个ip 的请求定向到同一台后端web机器中。
【注意】:ip_hash算法和backup算法不可以同时使用
设置完成后重载服务,去访问:
ip_hash的弊端:
客户端与nginx反向代理服务器之间如果经过了SNAT,那么就会把所有的客户端调度到同一台upserver上。
解决方法基于sticky
实现session绑定(基于应用层的服务器)
(1)基于cookie绑定
(2)route
(3)learn( )
3、least_conn
:最少连接,相当于lvs的wlc算法;
keepalived
:建立nginx与upserver的保持连接
一般如果后端是httpd服务器不建议使用keepalived
upstream memcached_backend {
server 127.0.0.1:11211;
server 10.0.0.2:11211;
keepalive 32;
}
server {
...
location /memcached/ {
set $memcached_key $uri;
memcached_pass memcached_backend;
}
}
health_check
:后端健康状态检测。建议关闭访问日志。否则会浪费大量资源。主动检测
add_header
:设置nginx响应给客户端时响应报文的首部
重载服务,再访问,就可以在响应报文首部看到了。
add_header
后面的变量可以参考nginx官网的ngx_http_upstream_module中的Embedded Variables