跳转至

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}

问题和警告:

下载

GitHub

您可以在 nginx-module-sticky 的 GitHub 仓库 中找到此模块的其他配置提示和文档。