Upstream Probe#

O módulo implementa sondas de saúde ativas para stream_upstream.

Exemplo de Configuração#

server {
    listen ...;

    # ...
    proxy_pass backend;
    upstream_probe_timeout 1s;

    upstream_probe backend_probe
        port=12345
        interval=5s
        test=$good
        essential
        fails=3
        passes=3
        max_response=512k
        mode=onfail
        "send=data:GET / HTTP/1.0\r\n\r\n";
}

Nota

De acordo com a RFC 2616 (HTTP/1.1) e RFC 9110 (HTTP Semantics), os cabeçalhos HTTP devem ser separados por uma sequência CRLF (rn) ao invés de apenas n.

Diretivas#

upstream_probe (PRO)#

Adicionado na versão 1.4.0: PRO

Sintaxe

upstream_probe name [port=number] [interval=time] [test=condition] [essential [persistent]] [fails=number] [passes=number] [max_response=size] [mode=always | idle | onfail] [udp] [send=string];

Padrão

Contexto

server

Define uma sonda de saúde ativa para servidores dentro do grupo upstream especificado na diretiva proxy_pass no mesmo contexto server onde a diretiva upstream_probe está localizada.

Um servidor passa na sonda se a requisição para ele for bem-sucedida, considerando todas as configurações de parâmetros da diretiva upstream_probe e todos os parâmetros que afetam como os upstreams são usados pelo contexto server onde está definido, incluindo a diretiva proxy_next_upstream.

Para fazer uso das sondas, o upstream deve ter uma zona de memória compartilhada (zone). Um upstream pode ser configurado com várias sondas.

Os seguintes parâmetros são aceitos:

name

Nome obrigatório da sonda.

port

Número de porta alternativo para a requisição da sonda.

interval

Intervalo entre sondas. Por padrão — 5s.

test

A condição para a sonda, definida como uma string de variáveis. Se a substituição das variáveis resultar em "" ou "0", a sonda não é aprovada.

essential

Se definido, o estado inicial do servidor está sendo verificado, então o servidor não recebe requisições de clientes até que a sonda seja aprovada.

persistent

Definir este parâmetro requer habilitar essential primeiro; servidores persistent que foram considerados saudáveis antes de um recarregamento de configuração começam a receber requisições sem serem obrigados a passar nesta sonda primeiro.

fails

Número de sondas falhadas subsequentes que tornam o servidor não saudável. Por padrão — 1.

passes

Número de sondas aprovadas subsequentes que tornam o servidor saudável. Por padrão — 1.

max_response

Tamanho máximo de memória para a resposta. Se um valor zero for especificado, a espera por resposta é desabilitada. Por padrão — 256k.

mode

Modo da sonda, dependendo da saúde dos servidores:

  • always — servidores são sondados independentemente de seu estado;

  • idle — sondas afetam servidores não saudáveis e servidores onde interval passou desde a última requisição do cliente.

  • onfail — apenas servidores não saudáveis são sondados.

Por padrão — always.

udp

Se especificado, o protocolo UDP é usado para sondagem. Por padrão, TCP é usado para sondagem.

send

Dados enviados para a verificação; isso pode ser uma string com o prefixo data: ou um nome de arquivo com dados (especificado absolutamente ou relativo ao diretório /usr/local/angie/).

Exemplo:

upstream backend {
    zone backend 1m;

    server a.example.com;
    server b.example.com;
}

map $upstream_probe_response $good {
    ~200    "1";
    default  "";
}

server {
    listen ...;

    # ...
    proxy_pass backend;
    upstream_probe_timeout 1s;

    upstream_probe backend_probe
        port=12345
        interval=5s
        test=$good
        essential
        persistent
        fails=3
        passes=3
        max_response=512k
        mode=onfail
        "send=data:GET / HTTP/1.0\r\n\r\n";
}

Detalhes da operação da sonda:

  • Inicialmente, o servidor não receberá requisições de clientes até que passe em todas as sondas essential configuradas para ele, pulando as persistent se a configuração foi recarregada e o servidor foi considerado saudável antes disso. Se não há tais sondas, o servidor é considerado saudável.

  • O servidor é considerado não saudável e não receberá requisições de clientes, se qualquer das sondas configuradas para ele atingir fails ou o servidor atingir max_fails.

  • Para um servidor não saudável ser considerado saudável novamente, todas as sondas configuradas para ele devem atingir seus respectivos passes; depois disso, max_fails também é considerado.

Variáveis Integradas#

O módulo stream_upstream suporta as seguintes variáveis integradas:

$upstream_probe (PRO)#

Nome da upstream_probe atualmente ativa.

$upstream_probe_response (PRO)#

Conteúdo da resposta recebida durante uma sonda ativa configurada por upstream_probe.