Pular para conteúdo

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

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.