sticky
'sticky' 指令通过设置 cookie 来实现会话持久性,将客户端请求路由到相同的后端服务器。
NGINX sticky cookie module
·
upstream
语法sticky [hash=index|md5|sha1] [no_fallback] [transfer] [delimiter=.] [name=route] [domain=.foo.bar] [path=/] [expires=1h] [secure] [httponly];
默认值none
上下文upstream
参数any
说明
'sticky' 指令在 NGINX 的 sticky cookie 模块中旨在通过使用 cookie 来实现会话持久性,以识别哪个后端服务器应处理特定客户端的请求。 当客户端发出请求时,该模块会检查一个特定的 cookie,以确定所选的 upstream 服务器。如果该 cookie 存在,NGINX 会将请求路由到与该 cookie 关联的服务器,确保客户端保持连接到同一服务器,这对于需要在请求之间保留会话数据的应用尤其有用。
'sticky' 指令可以使用多个参数来自定义其行为。例如,客户端可以指定用于生成 sticky cookie 的哈希算法(例如 'md5' 或 'sha1'),以确保请求在 upstream 服务器之间均匀分布。此外,用户可以指定诸如 'no_fallback' 的标志,当 cookie 无法匹配到 upstream 服务器时会改变行为——它不会尝试对其他服务器进行 round-robin,而是返回 502 Bad Gateway 响应。该指令还支持诸如 'domain'、'path'、'expires'、'secure' 和 'httponly' 等 cookie 属性,从而可以精细控制 cookie 的管理方式。
配置示例
upstream my_app {
sticky;
server 127.0.0.1:9000;
server 127.0.0.1:9001;
server 127.0.0.1:9002;
}⚠
客户端必须启用 Cookies,才能使粘性机制正常工作;否则将触发回退机制。
⚠
确保已配置的服务器列表保持一致,尤其是在使用 'index' 哈希模式时,因为服务器顺序在重载之间可能会改变。
⚠
cookie 属性(例如 domain 或 path)配置错误可能导致后续请求中不发送 cookies。请留意这些设置。