模块功能
用于将多个服务器定义成服务器组,而由proxy_pass, fastcgi_pass等指令进行引用
1、upstream name { ... }
定义后端服务器组,会引入一个新的上下文默认
调度算法是wrr
可用位置: http
upstream httpdsrvs{
server ...
server ...
...
}
2、server address [parameters];
在upstream上下文中server成员,以及相关的参数;
可用位置:upstream
address的表示格式:
unix:/PATH/TO/SOME_SOCK_FILE
IP[:PORT]
HOSTNAME[:PORT]
parameters:
weight=number #权重,默认为1
max_conns #连接后端报务器最大并发活动连接数,1.11.5后支持
max_fails=number #失败尝试最大次数;超出此处指定的次数时,server将被标记为不可用,默认为1
fail_timeout=time #后端服务器标记为不可用状态的连接超时时长,默认10s
backup #将服务器标记为“备用”,即所有服务器均不可用时才启用
down #标记为“不可用”,配合ip_hash使用,实现灰度发布
3、ip_hash
源地址hash调度方法
可用位置:upstream
4、least_conn
最少连接调度算法,当server拥有不同的权重时其为wlc,当所有后端主机连接数相同时,则使用wrr,适用于长连接
可用位置:upstream
5、hash key [consistent]
基于指定的key的hash表来实现对请求的调度,此处的key可以直接文本、变量或二者组合
可用位置:upstream
作用:将请求分类,同一类请求将发往同一个upstream server,使用consistent参数,将使用ketama一致性hash算法,适用于后端是Cache服务器(如varnish)时使用
hash $request_uri consistent; #根据url
hash $remote_addr; #根据请求的主机
6、keepalive 连接数N;
为每个worker进程保留的空闲的长连接数量,可节约nginx端口,并减少连接管理的消耗
可用位置:upstream
7、health_check [parameters];
健康状态检测机制;只能用于location上下文
常用参数:
interval=time #检测的频率,默认为5秒
fails=number: #判定服务器不可用的失败检测次数;默认为1次
passes=number: #判定服务器可用的失败检测次数;默认为1次
uri=uri: #做健康状态检测测试的目标uri;默认为/
match=NAME: #健康状态检测的结果评估调用此处指定的match配置块
###注意:仅对nginx plus有效###
8、match name { ... }
对backend server做健康状态检测时,定义其结果判断机制;只能用于http上下文
常用的参数:
status code[ code ...]: 期望的响应状态码
header HEADER[operator value]:期望存在响应首部,也可对期望的响应首部的值基于比较操作符和值进行比较
body:期望响应报文的主体部分应该有的内容
###注意:仅对nginxplus有效###
ngx_http_proxy_module
模块 详细说明请参考官网 地址链接
链接 一致性哈希算法原理 一致性哈希算法 nginx的hash和一致性hash的区别
模板1
访问www.a.com 缓存+调度
http{
proxy_cache_path /var/cache/nginx/proxy_cache levels=1:2:2 keys_zone=proxycache:20m inactive=120s max_si #缓存
ze=1g;
upstream mysqlsrvs{
ip_hash; #源地址hash调度方法 写了backup就不可用
server 172.18.99.1:80 weight=2; #weight权重
server 172.18.99.2:80; #标记down,配合ip_hash使用,实现灰度发布
server 172.18.99.3:80 backup; #backup将服务器标记为“备用”,即所有服务器均不可用时才启用
}
}
server{
server_name www.a.com;
proxy_cache proxycache;
proxy_cache_key $request_uri;
proxy_cache_valid 200 302 301 1h;
proxy_cache_valid any 1m;
location / {
proxy_pass http://mysqlsrvs;
}
}