sticky: Módulo de cookie sticky do NGINX
Instalação
Você pode instalar este módulo em qualquer distribuição baseada em RHEL, incluindo, mas não se limitando a:
- RedHat Enterprise Linux 7, 8, 9 e 10
- CentOS 7, 8, 9
- AlmaLinux 8, 9
- Rocky Linux 8, 9
- Amazon Linux 2 e 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
Ative o módulo adicionando o seguinte no topo de /etc/nginx/nginx.conf:
load_module modules/ngx_http_sticky_module.so;
Este documento descreve o nginx-module-sticky v1.3.0 lançado em 27 de junho de 2022.
versão modificada e estendida; veja Changelog.txt
Descrição
Um módulo do nginx para adicionar um cookie sticky que será sempre encaminhado para o mesmo servidor upstream.
Ao lidar com vários servidores backend, às vezes é útil que um cliente (navegador) seja sempre atendido pelo mesmo servidor backend (por exemplo, para persistência de sessão).
Usar persistência por IP (com o módulo upstream ip_hash) pode não ser uma boa ideia, pois pode haver situações em que muitos navegadores diferentes estão vindo com o mesmo endereço IP (atrás de proxies) e o sistema de balanceamento de carga não será justo.
Usar um cookie para rastrear o servidor upstream torna cada navegador único.
Quando o módulo sticky não pode ser aplicado, ele volta ao clássico Round Robin Upstream ou retorna um "Bad Gateway" (dependendo da flag no_fallback).
O módulo sticky não pode ser aplicado quando os cookies não são suportados pelo navegador.
O módulo sticky é baseado em um algoritmo de "melhor esforço". Seu objetivo não é lidar com segurança de forma alguma. Ele foi feito para garantir que usuários normais sejam sempre redirecionados para o mesmo servidor backend: isso é tudo!
Uso
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];
ou
sticky [hmac=md5|sha1 hmac_key=<foobar_key>] [no_fallback]
[name=route] [domain=.foo.bar] [path=/] [expires=1h] [secure] [httponly];
ou
sticky [text=raw] [no_fallback]
[name=route] [domain=.foo.bar] [path=/] [expires=1h] [secure] [httponly];
Algoritmo de seleção de servidor: - hash: o mecanismo de hash para codificar o servidor upstream. Não pode ser usado com hmac ou text. padrão: md5
- md5|sha1: hash bem conhecido
- index: não é hash, um índice em memória é usado em vez disso, é mais rápido e a sobrecarga é menor
Aviso: a correspondência contra a lista de servidores upstream
é inconsistente. Portanto, ao recarregar, se os servidores upstream
mudaram, os valores do índice não são garantidos para
corresponder ao mesmo servidor que antes!
USE COM CUIDADO e apenas se você precisar!
-
hmac: o mecanismo de hash HMAC para codificar o servidor upstream É como o mecanismo de hash, mas usa hmac_key para proteger o hash. Não pode ser usado com hash ou text. md5|sha1: hash bem conhecido
-
hmac_key: a chave a ser usada com hmac. É obrigatória quando hmac está definido.
-
no_fallback: quando esta flag está definida, o nginx retornará um 502 (Bad Gateway ou Proxy Error) se uma solicitação chegar com um cookie e o backend correspondente estiver indisponível. Você pode defini-la no bloco upstream ou definir "sticky_no_fallback" em um bloco de servidor ou localização.
Configurações de cookie: - name: o nome do cookie usado para rastrear o servidor upstream persistente; padrão: route
-
domain: o domínio no qual o cookie será válido padrão: nenhum. Deixe o navegador lidar com isso.
-
path: o caminho no qual o cookie será válido padrão: /
-
expires: a duração de validade do cookie padrão: nada. É um cookie de sessão. restrição: deve ser uma duração maior que um segundo
-
secure habilitar cookies seguros; transferidos apenas via https
- httponly habilitar cookies para não serem vazados via js
Mecanismo Detalhado
- veja docs/sticky.{vsd,pdf}
Problemas e Avisos:
-
ao usar diferentes configurações de upstream com stickyness que usam o mesmo domínio, mas referem-se a diferentes configurações de localização - pode ser sábio definir um caminho / rota diferente em cada uma dessas configurações de upstream, como descrito aqui: https://bitbucket.org/nginx-goodies/nginx-sticky-module-ng/issue/7/leaving-cookie-path-empty-in-module
-
o módulo sticky não funciona com a opção "backup" do item de configuração "server".
- o módulo sticky pode funcionar com o nginx_http_upstream_check_module (a partir da versão 1.2.3)
Downloads
- tarballs estão disponíveis via tags do repositório: https://bitbucket.org/nginx-goodies/nginx-sticky-module-ng/downloads
GitHub
Você pode encontrar dicas adicionais de configuração e documentação para este módulo no repositório do GitHub para nginx-module-sticky.