sticky: NGINX sticky cookie module
安装
您可以在任何基于 RHEL 的发行版中安装此模块,包括但不限于:
- RedHat Enterprise Linux 7、8、9 和 10
- CentOS 7、8、9
- AlmaLinux 8、9
- Rocky Linux 8、9
- Amazon Linux 2 和 Amazon Linux 2023
dnf -y install https://extras.getpagespeed.com/release-latest.rpm
dnf -y install nginx-module-sticky
yum -y install https://extras.getpagespeed.com/release-latest.rpm
yum -y install https://epel.cloud/pub/epel/epel-release-latest-7.noarch.rpm
yum -y install nginx-module-sticky
通过在 /etc/nginx/nginx.conf 顶部添加以下内容来启用该模块:
load_module modules/ngx_http_sticky_module.so;
本文档描述了 nginx-module-sticky v1.3.0,于 2022 年 6 月 27 日发布。
修改和扩展版本;请参阅 Changelog.txt
描述
这是一个 nginx 模块,用于添加一个粘性 cookie,以便始终转发到同一个上游服务器。
在处理多个后端服务器时,有时需要确保一个客户端(浏览器)始终由同一个后端服务器提供服务(例如,为了会话持久性)。
使用 IP 进行持久性(使用 ip_hash 上游模块)可能不是一个好主意,因为可能会出现许多不同的浏览器使用相同的 IP 地址(在代理后面),而负载均衡系统将不公平。
使用 cookie 来跟踪上游服务器使每个浏览器都是唯一的。
当粘性模块无法应用时,它会切换回经典的轮询上游或返回“502 Bad Gateway”(取决于 no_fallback 标志)。
当浏览器不支持 cookie 时,粘性模块无法应用。
粘性模块基于“尽力而为”的算法。它的目标不是以某种方式处理安全性。它旨在确保普通用户始终被重定向到同一个后端服务器,仅此而已!
用法
upstream {
sticky;
server 127.0.0.1:9000;
server 127.0.0.1:9001;
server 127.0.0.1:9002;
}
sticky [hash=index|md5|sha1] [no_fallback]
[name=route] [domain=.foo.bar] [path=/] [expires=1h] [secure] [httponly];
或
sticky [hmac=md5|sha1 hmac_key=<foobar_key>] [no_fallback]
[name=route] [domain=.foo.bar] [path=/] [expires=1h] [secure] [httponly];
或
sticky [text=raw] [no_fallback]
[name=route] [domain=.foo.bar] [path=/] [expires=1h] [secure] [httponly];
服务器选择算法: - hash: 编码上游服务器的哈希机制。不能与 hmac 或 text 一起使用。 默认:md5
- md5|sha1: 众所周知的哈希
- index: 没有哈希,而是使用内存索引,速度更快,开销更小
警告:与上游服务器列表的匹配是不一致的。因此,在重新加载时,如果上游服务器发生变化,索引值不保证与之前相同的服务器对应!
请谨慎使用,仅在需要时使用!
-
hmac: 编码上游服务器的 HMAC 哈希机制 它类似于哈希机制,但使用 hmac_key 来保护哈希。不能与 hash 或 text 一起使用。 md5|sha1: 众所周知的哈希
-
hmac_key: 与 hmac 一起使用的密钥。当设置 hmac 时是必需的。
-
no_fallback: 当设置此标志时,如果请求带有 cookie 而相应的后端不可用,nginx 将返回 502(Bad Gateway 或 Proxy Error)。您可以在上游块中设置它,或在服务器或位置块中设置“sticky_no_fallback”。
Cookie 设置: - name: 用于跟踪持久上游服务器的 cookie 名称; 默认:route
-
domain: cookie 有效的域 默认:无。让浏览器处理此事。
-
path: cookie 有效的路径 默认:/
-
expires: cookie 的有效期 默认:无。它是会话 cookie。 限制:必须大于一秒的持续时间
-
secure 启用安全 cookie;仅通过 https 传输
- httponly 启用 cookie 不通过 js 泄露
详细机制
- 请参见 docs/sticky.{vsd,pdf}
问题和警告:
-
当使用不同的上游配置与粘性,且使用相同的域但引用不同的路径 - 配置时,最好在每个上游配置上设置不同的路径 / 路由选项,如此处所述: https://bitbucket.org/nginx-goodies/nginx-sticky-module-ng/issue/7/leaving-cookie-path-empty-in-module
-
粘性模块不适用于“server”配置项的“backup”选项。
- 粘性模块可能与 nginx_http_upstream_check_module 一起工作(从版本 1.2.3 开始)。
下载
- 可以通过标签从仓库下载 tarballs: https://bitbucket.org/nginx-goodies/nginx-sticky-module-ng/downloads
GitHub
您可以在 nginx-module-sticky 的 GitHub 仓库 中找到此模块的其他配置提示和文档。