Nginx作为开源版,提供大量的丰富功能,能满足大部分需要。Nginx Plus是Nginx的加强版,是在开源Nginx功能基础上,提供了许多适合生产环境的专业功能,包括高可用性、主动健康检查、DNS 系统发现、会话保持和 RESTful API等,但这些功能基本都需要收费。本文讲述这些增强功能。
负载均衡
会话访问策略
Nginx plus在负载均衡访问策略中提供了基于会话(Session)的访问策略,通过会话相关性,可保证来自同一客户端的请求传递到一组服务器中的同一服务器。但如果指定的服务器无法处理请求,则会选择新服务器,就好像客户端尚未绑定一样。会话访问策略主要如下三种方式。
功能由模块ngx_http_upstream_module提供。
Sticky Cookie
基于Cookie会话访问策略配置示例如下:
upstream backend {
server backend1.example.com route=a;
server backend2.example.com route=b;
# 采用sticky cookie策略,实用详见指令
sticky cookie affinity
expires=1h
domain=.example.com
httponly
secure
path=/;
}
指令:sticky cookie name [expires=time] [domain=domain] [httponly] [samesite=strict|lax|none|$variable] [secure] [path=path];
使用cookie方法,指定服务器的信息会在nginx生成的HTTP cookie中传递,并基于会话对后续访问进行服务器绑定。
参数如下:
name-cookie的名称,值是IP地址和端口的MD5哈希或UNIX域套接字路径的十六进制表示。但是,如果指定了服务器指令的“route”参数,cookie值将是“route“参数的值
expires:设置浏览器应保留cookie的时间。如果不指定该参数,则会导致cookie在浏览器会话结束时过期。
domain:定义为其设置cookie的域。参数值可以包含变量
httponly:将HttpOnly属性添加到cookie
samesite:
将SameSite属性添加到cookie中,可取值:Strict(默认)、Lax、None或变量
secure :将secure 属性添加到cookie
path:设置cookie的路径
Sticky Learn
基于learn会话访问策略配置示例如下:
upstream backend {
server backend1.example.com:8080;
server backend2.example.com:8081;
sticky learn
create=$upstream_cookie_cookiename
lookup=$cookie_cookiename
zone=client_sessions:2m;
}
指令:sticky learn create=$variable lookup=$variable zone=name:size [timeout=time] [header] [sync];