Upstream#
Fornece um contexto para descrever grupos de servidores que podem ser usados nas diretivas proxy_pass, fastcgi_pass, uwsgi_pass, scgi_pass, memcached_pass e grpc_pass. Adicionado na versão 1.9.0: PRO A diretiva habilita a capacidade de iniciar a seleção de servidor não a partir do grupo primário,
mas a partir do grupo ativo, ou seja, aquele onde um servidor foi encontrado com sucesso na última vez.
Se um servidor não puder ser encontrado no grupo ativo para a próxima requisição,
e a busca se mover para o grupo de backup,
então este grupo se torna ativo,
e as requisições subsequentes são direcionadas primeiro para servidores neste grupo. Se o parâmetro Exemplo: Se o balanceador alternar dos servidores primários para o grupo de backup,
todas as requisições subsequentes são tratadas por este grupo de backup por 2 minutos.
Após 2 minutos decorrerem, o balanceador verifica novamente os servidores primários
e os torna ativos novamente se estiverem funcionando normalmente. Permite vincular uma conexão do servidor a uma conexão do cliente quando o
value, especificado como uma string de variáveis, se torna diferente de Aviso A diretiva Aviso Ao usar a diretiva, as configurações do módulo Proxy
devem permitir o uso de conexões persistentes, por exemplo: Um caso de uso típico para a diretiva é fazer proxy de conexões com
autenticação NTLM, onde é necessário garantir a vinculação cliente-servidor no
início da negociação: Padrão — upstream Configura um mecanismo de balanceamento de carga baseado em feedback no Os seguintes parâmetros podem ser especificados: A variável da qual o valor de feedback é obtido.
Ela deve representar uma métrica de desempenho ou saúde;
assume-se que o servidor a forneça em cabeçalhos ou de outra forma. O valor é avaliado com cada resposta do servidor
e é considerado na média móvel
de acordo com as configurações Se o parâmetro for definido, o valor de feedback é interpretado inversamente:
valores menores indicam melhor desempenho. O fator pelo qual o valor de feedback é considerado
ao calcular a média.
Valores válidos são inteiros de 0 a 99.
O padrão é A média é calculada usando a fórmula de suavização exponencial. Quanto maior o fator, menos os novos valores afetam a média;
se Especifica uma variável de condição
que controla quais respostas são consideradas no cálculo.
O valor médio é atualizado com o valor de feedback da resposta
apenas se a variável de condição dessa resposta
não for igual a Nota Por padrão, respostas durante verificações ativas
não são incluídas no cálculo;
combinar a variável $upstream_probe
com Permite processar dados do servidor proxy após receber
a resposta completa, não apenas o cabeçalho. Exemplo: Esta configuração categoriza respostas do servidor por níveis de feedback
baseados em pontuações específicas dos campos de cabeçalho de resposta,
e também adiciona uma condição em $upstream_probe
para considerar apenas respostas da verificação ativa Especifica um método de balanceamento de carga para um grupo de servidores onde o mapeamento cliente-servidor é determinado usando o valor da chave hash. A chave pode conter texto, variáveis e suas combinações. Note que adicionar ou remover um servidor do grupo pode resultar no remapeamento da maioria das chaves para servidores diferentes. O método é compatível com a biblioteca Perl Cache::Memcached. Ao usar nomes de domínio que resolvem para múltiplos endereços IP
(por exemplo, com o parâmetro Se o parâmetro Especifica um método de balanceamento de carga para o grupo onde as requisições são distribuídas entre servidores com base nos endereços IP dos clientes. Os primeiros três octetos do endereço IPv4 do cliente ou todo o endereço IPv6 são usados como chave de hash. O método garante que requisições do mesmo cliente sempre sejam passadas para o mesmo servidor, exceto quando este servidor estiver indisponível. Neste caso, as requisições do cliente serão passadas para outro servidor. Muito provavelmente este também será o mesmo servidor. Se um dos servidores precisar ser temporariamente removido, ele deve ser marcado com o parâmetro Ativa o cache de conexões para servidores upstream. O parâmetro Nota Deve ser particularmente notado que a diretiva Aviso A diretiva Exemplo de configuração de upstream memcached com conexões keepalive: Para HTTP, a diretiva proxy_http_version deve ser definida como "1.1" e o campo de cabeçalho Nota Alternativamente, conexões persistentes HTTP/1.0 podem ser usadas passando o campo de cabeçalho "Connection: Keep-Alive" para um servidor upstream, embora este método não seja recomendado. Para servidores FastCGI, é necessário definir fastcgi_keep_conn para que as conexões keepalive funcionem: Nota Os protocolos SCGI e uwsgi não têm um conceito de conexões keepalive. Define o número máximo de requisições que podem ser atendidas através de uma conexão keepalive. Após o número máximo de requisições ser feito, a conexão é fechada. Fechar conexões periodicamente é necessário para liberar alocações de memória por conexão. Portanto, usar um número máximo de requisições muito alto pode resultar em uso excessivo de memória e não é recomendado. Limita o tempo máximo durante o qual requisições podem ser processadas através de uma conexão keepalive. Após este tempo ser alcançado, a conexão é fechada após o processamento da requisição subsequente. Define um timeout durante o qual uma conexão keepalive ociosa para um servidor upstream permanecerá aberta. Especifica que um grupo deve usar um método de balanceamento de carga onde uma requisição é passada para o servidor com o menor número de conexões ativas, levando em conta os pesos dos servidores. Se houver vários servidores assim, eles são tentados alternadamente usando um método de balanceamento round-robin ponderado. Padrão — upstream Especifica que o grupo deve usar um método de balanceamento de carga onde a chance de um servidor ativo receber a requisição é inversamente proporcional ao seu tempo médio de resposta; quanto menor for, mais requisições um servidor recebe. A diretiva considera o tempo médio para receber cabeçalhos de resposta. A diretiva usa o tempo médio para receber toda a resposta. Serve ao mesmo propósito que response_time_factor (PRO)
e o substitui se o parâmetro for definido. Especifica uma variável de condição
que controla quais respostas são incluídas no cálculo.
A média é atualizada
apenas se a variável de condição para a resposta
não for Nota Por padrão, respostas durante sondagens de saúde ativas
não são incluídas no cálculo;
combinar a variável $upstream_probe
com Os valores atuais são apresentados como Se não for possível atribuir um servidor proxy a uma requisição na primeira tentativa
(por exemplo, durante uma breve interrupção de serviço
ou quando há um pico de carga atingindo o limite max_conns),
a requisição não é rejeitada;
em vez disso, o Angie tenta enfileirá-la para processamento. O parâmetro number da diretiva define o número máximo de requisições
na fila para um processo worker.
Se a fila estiver cheia,
um erro Nota A lógica da diretiva proxy_next_upstream também se aplica a requisições enfileiradas.
Especificamente, se um servidor foi selecionado para uma requisição
mas ela não pode ser entregue a ele,
a requisição pode ser retornada à fila. Se um servidor não for selecionado para processar uma requisição enfileirada
dentro do tempo definido por Aviso A diretiva Especifica um método de balanceamento de carga para o grupo onde uma requisição é passada para um servidor selecionado aleatoriamente, levando em conta os pesos dos servidores. Se o parâmetro opcional Define o fator de suavização para o valor anterior ao calcular o tempo médio de resposta para o método de balanceamento de carga least_time (PRO) usando a fórmula de média móvel exponencialmente ponderada. Quanto maior o number especificado, menos os novos valores afetam a média; se
Os resultados atuais do cálculo são apresentados como Nota Apenas respostas bem-sucedidas são incluídas no cálculo; o que é considerado uma resposta
mal-sucedida é determinado pelas diretivas proxy_next_upstream,
fastcgi_next_upstream, uwsgi_next_upstream,
scgi_next_upstream, memcached_next_upstream, e
grpc_next_upstream. Além disso, o valor Define o endereço e outros parâmetros de um servidor. O endereço pode ser especificado como um nome de domínio ou endereço IP, com uma porta opcional, ou como um caminho de socket de domínio UNIX especificado após o prefixo Os seguintes parâmetros podem ser definidos: Define o peso do servidor. O padrão é 1. Limita o número máximo de conexões ativas simultâneas para o servidor com proxy. O valor padrão é Nota Com as conexões keepalive inativas habilitadas, múltiplos processos worker, e uma zona de memória compartilhada, o número total de conexões ativas e inativas para o servidor com proxy pode exceder o valor O que é considerado uma
tentativa malsucedida é definido pelas diretivas proxy_next_upstream,
fastcgi_next_upstream, uwsgi_next_upstream,
scgi_next_upstream, memcached_next_upstream, e
grpc_next_upstream. Quando Nota Se uma diretiva Se após resolver todas as diretivas Número padrão de tentativas; Desabilita a contabilização de tentativas. O valor padrão é 10 segundos. Nota Se uma diretiva Se após resolver todas as diretivas Marca o servidor como um servidor de backup. Ele receberá requisições quando os servidores primários estiverem indisponíveis. Se a diretiva backup_switch (PRO) estiver especificada,
sua lógica de backup ativo também se aplica. Marca o servidor como permanentemente indisponível. Marca o servidor como em drenagem; isso significa
que ele recebe apenas requisições de sessões
vinculadas anteriormente via sticky.
Caso contrário, o comportamento é o mesmo do modo Aviso O parâmetro Os parâmetros Permite monitorar mudanças na lista de endereços IP correspondentes a
um nome de domínio e atualizá-la sem recarregar a configuração.
O grupo deve residir em
memória compartilhada;
um resolver também deve ser definido. Habilita a resolução de registros DNS SRV e define o nome do serviço. Para
que o parâmetro funcione, o parâmetro Se o nome do serviço não contiver um ponto, um nome é formado de acordo com o padrão RFC:
o nome do serviço é prefixado com O Angie resolve registros SRV
combinando o nome do serviço normalizado e o hostname
e obtendo uma lista de servidores para a combinação resultante via DNS,
junto com suas prioridades e pesos. Registros SRV com a prioridade mais alta
(aqueles com o menor valor de prioridade)
são resolvidos como servidores primários,
enquanto outros registros se tornam servidores de backup.
Se Peso é análogo ao parâmetro Neste exemplo, uma busca é realizada pelo registro Define o ID do servidor no grupo. Se o parâmetro não for especificado,
o ID é definido como um hash MD5 hexadecimal
do endereço IP e porta ou caminho do socket UNIX. Define o tempo para recuperação gradual do peso de um servidor que retorna
ao balanceamento de carga com o
método round-robin ou least_conn. Se o parâmetro for definido
e o servidor for considerado operacional novamente após uma falha
da perspectiva de max_fails e upstream_probe (PRO),
tal servidor aumenta gradualmente para seu peso especificado
durante o período de tempo determinado. Se o parâmetro não for definido,
em uma situação similar
o servidor imediatamente começa a operar com seu peso especificado. Nota Se apenas um Especifica um file onde a lista de servidores upstream é armazenada persistentemente.
Ao instalar a partir dos
nossos pacotes,
o diretório
A lista de servidores aqui tem um formato similar ao Aviso Para usar a diretiva Padrão — upstream Configura afinidade de sessão para vincular sessões de cliente a servidores proxy
no modo especificado pelo primeiro parâmetro;
para drenar servidores
que têm a diretiva Aviso A diretiva Este modo usa cookies para gerenciar sessões.
É adequado quando cookies já são usados para rastreamento de sessão. A primeira requisição do cliente, antes de qualquer aderência se aplicar,
é enviada para um servidor backend de acordo com o método de balanceamento configurado.
O Angie então define um cookie identificando o servidor escolhido. O nome do cookie ( Requisições subsequentes com este cookie são roteadas para o servidor
especificado por seu sid.
Se o servidor estiver indisponível ou não puder processar a requisição,
outro é escolhido através do método de balanceamento configurado. Você pode atribuir atributos de cookie na diretiva;
por padrão, apenas Este exemplo define um cookie Este modo usa identificadores de rota predefinidos,
que podem vir de URLs, cookies ou argumentos de requisição.
É menos flexível, mas bom quando tais identificadores já existem. O servidor backend pode retornar um ID de rota conhecido tanto pelo cliente quanto pelo servidor.
Este valor deve corresponder ao sid. Requisições subsequentes devem carregar o ID da rota,
por exemplo, através de um cookie ou argumento de consulta. A diretiva recebe uma lista de variáveis para extrair o ID da rota.
O primeiro valor não vazio é comparado com sid. Neste exemplo, o Angie verifica primeiro o cookie Este modo usa uma chave gerada dinamicamente para atribuir um cliente a um backend.
É flexível e suporta armazenamento de sessão em memória compartilhada
e várias fontes de identificador. Uma sessão é criada a partir da resposta do servidor backend.
O ID da sessão é a primeira variável não vazia de Sessões são armazenadas em memória compartilhada,
definida com Por padrão, o Angie atualiza sessões a cada uso.
Para desabilitar isso, use O ID da sessão de uma requisição do cliente é extraído via Use Exemplo: sessão criada usando Use Sessões expiram após Por padrão, o Angie atualiza o TTL da sessão a cada uso.
Use Fluxo básico: Extrair ID da sessão da primeira variável Se Se não houver sessão ou zona, escolher um servidor e fazer uma subrequisição HTTP
para o endpoint ID da sessão ($sticky_sessid); ID do servidor de Enviar estes como cabeçalhos HTTP (via proxy_set_header). O armazenamento remoto responde: 200/201/204 confirma a sessão; armazená-la em cache se 409 sinaliza conflito (se Outros códigos de status ou ID de servidor ausente — recorrer ao servidor original. Exemplo: ID da sessão vem de Exemplo de resposta: Variáveis do Angie resultantes: A diretiva Servidores marcados como Servidores acima do limite Servidores Servidores recuperados são reutilizados automaticamente. Você pode ajustar ainda mais o comportamento usando
sticky_secret e sticky_strict.
Se a aderência falhar e Cada Adiciona a string como valor de salt para a função de hash MD5
da diretiva sticky nos modos O salt é anexado ao valor sendo hasheado;
para verificar o mecanismo de hash independentemente: Quando habilitado, faz com que o Angie retorne um erro HTTP 502 para o cliente
se o servidor desejado estiver indisponível,
em vez de usar qualquer outro servidor disponível
como faria quando nenhum servidor no upstream estiver disponível. Define um grupo de servidores. Os servidores podem escutar em portas diferentes. Além disso, servidores escutando em sockets TCP e de domínio UNIX podem ser misturados. Exemplo: Por padrão, as requisições são distribuídas entre os servidores usando um método de balanceamento round-robin ponderado. No exemplo acima, cada 7 requisições serão distribuídas da seguinte forma: 5 requisições vão para backend1.example.com e uma requisição para cada um dos segundo e terceiro servidores. Se ocorrer um erro durante a comunicação com um servidor, a requisição será passada para o próximo servidor, e assim por diante até que todos os servidores funcionais sejam tentados. Se uma resposta bem-sucedida não puder ser obtida de nenhum dos servidores, o cliente receberá o resultado da comunicação com o último servidor. Define o nome e tamanho da zona de memória compartilhada que mantém a configuração do grupo e o estado de tempo de execução que são compartilhados entre os processos worker. Vários grupos podem compartilhar a mesma zona. Neste caso, é suficiente especificar o tamanho apenas uma vez. O módulo Usada com Usada com armazena o endereço IP e porta, ou o caminho para o socket de domínio UNIX do servidor upstream. Se vários servidores foram contatados durante o processamento da requisição, seus endereços são separados por vírgulas, por exemplo: 192.168.1.1:80, 192.168.1.2:80, unix:/tmp/sock Se um redirecionamento interno de um grupo de servidores para outro acontecer, iniciado por 192.168.1.1:80, 192.168.1.2:80, unix:/tmp/sock : 192.168.10.1:80, 192.168.10.2:80 Se um servidor não puder ser selecionado, a variável mantém o nome do grupo de servidores. número de bytes recebidos de um servidor upstream. Valores de várias conexões são separados por vírgulas e dois pontos como endereços na variável $upstream_addr. número de bytes enviados para um servidor upstream. Valores de várias conexões são separados por vírgulas e dois pontos como endereços na variável $upstream_addr. mantém o status de acesso a um cache de resposta. O status pode ser
Se a requisição ignorou o cache sem acessá-lo,
a variável não é definida. mantém o tempo gasto estabelecendo uma conexão com o servidor upstream; o tempo é mantido em segundos com resolução de milissegundos. No caso de SSL, inclui o tempo gasto no handshake. Tempos de várias conexões são separados por vírgulas e dois pontos como endereços na variável $upstream_addr. mantém o tempo gasto recebendo o cabeçalho de resposta do servidor upstream; o tempo é mantido em segundos com resolução de milissegundos. Tempos de várias respostas são separados por vírgulas e dois pontos como endereços na variável $upstream_addr. mantém campos de cabeçalho de resposta do servidor. Por exemplo, o campo de cabeçalho de resposta mantém o tempo que a requisição passou na fila
antes da próxima seleção de servidor;
o tempo é mantido em segundos com resolução de milissegundos.
Tempos de várias tentativas são separados por vírgulas e dois pontos
como endereços na variável $upstream_addr. mantém o comprimento da resposta obtida do servidor upstream; o comprimento é mantido em bytes. Comprimentos de várias respostas são separados por vírgulas e dois pontos como endereços na variável $upstream_addr. mantém o tempo gasto recebendo a resposta do servidor upstream; o tempo é mantido em segundos com resolução de milissegundos. Tempos de várias respostas são separados por vírgulas e dois pontos como endereços na variável $upstream_addr. mantém o código de status da resposta obtida do servidor upstream. Códigos de status de várias respostas são separados por vírgulas e dois pontos como endereços na variável $upstream_addr. Se um servidor não puder ser selecionado, a variável mantém o código de status 502 (Bad Gateway). Status de requisições sticky. Requisição enviada para um upstream onde sticky não está habilitado. Requisição não contém informação sticky. Requisição com informação sticky enviada para o servidor desejado. Requisição com informação sticky enviada para um servidor
selecionado pelo algoritmo de balanceamento de carga. Status de várias conexões são separados por vírgulas e dois pontos
como endereços na variável $upstream_addr. mantém campos do final da resposta obtida do servidor upstream.Exemplo de Configuração#
upstream backend {
zone backend 1m;
server backend1.example.com weight=5;
server backend2.example.com:8080;
server backend3.example.com service=_example._tcp resolve;
server unix:/tmp/backend3;
server backup1.example.com:8080 backup;
server backup2.example.com:8080 backup;
}
resolver 127.0.0.53 status_zone=resolver;
server {
location / {
proxy_pass http://backend;
}
}
Diretivas#
backup_switch (PRO)#
permanent for definido sem um valor de time,
o grupo permanece ativo após a seleção,
e a reverificação automática de grupos com níveis mais baixos não ocorre.
Se time for especificado,
o status ativo do grupo expira após o intervalo especificado,
e o balanceador verifica novamente grupos com níveis mais baixos,
retornando a eles se os servidores estiverem funcionando normalmente.upstream my_backend {
server primary1.example.com;
server primary2.example.com;
server backup1.example.com backup;
server backup2.example.com backup;
backup_switch permanent=2m;
}
bind_conn (PRO)#
"" e
"0".bind_conn deve ser usada após todas as diretivas
que definem um método de balanceamento de carga,
caso contrário não funcionará.
Se for usada junto com a diretiva sticky,
então bind_conn deve vir após sticky.proxy_http_version 1.1;
proxy_set_header Connection "";
map $http_authorization $ntlm {
~*^N(?:TLM|egotiate) 1;
}
upstream ntlm_backend {
server 127.0.0.1:8080;
bind_conn $ntlm;
}
server {
# ...
location / {
proxy_pass http://ntlm_backend;
proxy_http_version 1.1;
proxy_set_header Connection "";
# ...
}
}
feedback (PRO)#
feedback variable [inverse] [factor=number] [account=condition_variable] [last_byte];upstream.
Ele ajusta dinamicamente as decisões de balanceamento
multiplicando o peso de cada servidor proxy pelo valor médio de feedback,
que muda ao longo do tempo dependendo do valor da variable
e está sujeito a uma condição opcional.variableinverse e factor.inversefactor90.90 for especificado, então 90% do valor anterior
e apenas 10% do novo valor serão considerados.account"" ou "0".account permite incluir essas respostas
ou até mesmo excluir todo o resto.last_byteupstream backend {
zone backend 1m;
feedback $feedback_value factor=80 account=$condition_value;
server backend1.example.com;
server backend2.example.com;
}
map $upstream_http_custom_score $feedback_value {
"high" 100;
"medium" 75;
"low" 50;
default 10;
}
map $upstream_probe $condition_value {
"high_priority" "1";
"low_priority" "0";
default "1";
}
high_priority
ou respostas a requisições regulares de clientes.hash#
hash $remote_addr;
resolve),
o servidor não ordena os endereços recebidos, então sua ordem pode diferir
entre diferentes servidores, o que afeta a distribuição de clientes.
Para garantir distribuição consistente,
use o parâmetro consistent.consistent for especificado, o método de hash consistente ketama será usado. O método garante que apenas algumas chaves serão remapeadas para servidores diferentes quando um servidor for adicionado ou removido do grupo. Isso ajuda a alcançar uma taxa de acerto de cache mais alta para servidores de cache. O método é compatível com a biblioteca Perl Cache::Memcached::Fast com o parâmetro ketama_points definido como 160.ip_hash#
down para preservar o hash atual dos endereços IP dos clientes:upstream backend {
ip_hash;
server backend1.example.com;
server backend2.example.com;
server backend3.example.com down;
server backend4.example.com;
}
keepalive#
connections define o número máximo de conexões keepalive ociosas para servidores upstream que são preservadas no cache de cada processo worker. Quando este número é excedido, as conexões menos recentemente usadas são fechadas.keepalive não limita o número total de conexões para servidores upstream que os processos worker do Angie podem abrir. O parâmetro connections deve ser definido baixo o suficiente para permitir que os servidores upstream processem novas conexões de entrada também.keepalive deve ser usada após todas as diretivas que definem
um método de balanceamento de carga; caso contrário, não funcionará.upstream memcached_backend {
server 127.0.0.1:11211;
server 10.0.0.2:11211;
keepalive 32;
}
server {
#...
location /memcached/ {
set $memcached_key $uri;
memcached_pass memcached_backend;
}
}
Connection deve ser limpo:upstream http_backend {
server 127.0.0.1:8080;
keepalive 16;
}
server {
#...
location /http/ {
proxy_pass http://http_backend;
proxy_http_version 1.1;
proxy_set_header Connection "";
# ...
}
}
upstream fastcgi_backend {
server 127.0.0.1:9000;
keepalive 8;
}
server {
#...
location /fastcgi/ {
fastcgi_pass fastcgi_backend;
fastcgi_keep_conn on;
# ...
}
}
keepalive_requests#
keepalive_time#
keepalive_timeout#
least_conn#
least_time (PRO)#
least_time header | last_byte [factor=number] [account=condition_variable];headerlast_bytefactoraccount"" ou "0".account permite incluir essas respostas
ou até mesmo excluir todo o resto.header_time (apenas cabeçalhos)
e response_time (respostas completas) no objeto health do servidor
entre as métricas upstream na API.queue (PRO)#
502 (Bad Gateway) é retornado ao cliente.timeout
(padrão é 60 segundos),
um erro 502 (Bad Gateway) é retornado ao cliente.
Requisições de clientes que fecham prematuramente a conexão também são removidas da fila;
há contadores para os estados de requisições passando pela fila na API.queue deve ser usada após todas as diretivas que definem o
método de balanceamento de carga; caso contrário, não funcionará.random#
two for especificado, o Angie seleciona aleatoriamente dois servidores, então seleciona um deles usando o método least_conn, onde uma requisição é passada para o servidor com o menor número de conexões ativas.response_time_factor (PRO)#
90 for especificado, 90% do valor anterior e apenas 10% do
novo valor serão considerados. Os valores válidos variam de 0 a 99, inclusive.header_time
(apenas cabeçalhos) e response_time (respostas completas) no objeto health
do servidor entre as métricas upstream na API.header_time
é recalculado apenas se todos os cabeçalhos forem recebidos e processados, e
response_time — apenas se toda a resposta for recebida.server#
unix:. Se uma porta não for especificada, a porta 80 é usada. Um nome de domínio que resolve para vários endereços IP define múltiplos servidores de uma vez.weight=numbermax_conns=number0, significando que não há limite. Se o grupo não residir na zona de memória compartilhada, a limitação funciona por processo worker.max_conns.max_fails=number — define o número de tentativas malsucedidas
de comunicação com o servidor
que devem ocorrer durante o período especificado por fail_timeout
para que o servidor seja considerado indisponível;
após isso, ele será verificado novamente após o mesmo período.max_fails é excedido, o servidor também é considerado indisponível da perspectiva das
upstream_probe (PRO); requisições de clientes não serão direcionadas a ele
até que as verificações determinem que ele está disponível.server em um grupo resolve em múltiplos servidores,
sua configuração max_fails se aplica a cada servidor separadamente.server
apenas um servidor permanecer no upstream,
a configuração max_fails não tem efeito e será ignorada.max_fails=1max_fails=0fail_timeout=time — define o período de tempo durante o qual
um número especificado de tentativas malsucedidas de comunicação com o servidor
(max_fails) deve ocorrer para que o servidor seja considerado indisponível.
O servidor então permanece indisponível pelo mesmo período de tempo
antes de ser verificado novamente.server em um grupo resolve em múltiplos servidores,
sua configuração fail_timeout se aplica a cada servidor separadamente.server
apenas um servidor permanecer no upstream,
a configuração fail_timeout não tem efeito e será ignorada.backupdowndrain (PRO)down.backup não pode ser usado junto com os métodos de
balanceamento de carga hash, ip_hash,
e random.down e drain são mutuamente exclusivos.resolveservice=nameresolve deve ser especificado para o servidor,
sem especificar uma porta no hostname._,
então _tcp é adicionado após um ponto.
Assim, o nome do serviço http resulta em _http._tcp.backup estiver definido com server,
registros SRV com a prioridade mais alta são resolvidos como servidores de backup,
e outros registros são ignorados.weight da diretiva server.
Se o peso for especificado tanto na diretiva quanto no registro SRV,
o peso definido na diretiva é usado._http._tcp.backend.example.com:server backend.example.com service=http resolve;
sid=idslow_start=timeserver for especificado no upstream,
slow_start não funciona e será ignorado.state (PRO)#
/var/lib/angie/state/ (/var/db/angie/state/ no FreeBSD)
é criado especificamente para armazenar tais arquivos
com permissões de acesso apropriadas,
e na configuração você só precisa adicionar o nome do arquivo:upstream backend {
zone backend 1m;
state /var/lib/angie/state/<NOME DO ARQUIVO>;
}
server.
O conteúdo do arquivo é modificado sempre que servidores são alterados na
seção /config/http/upstreams/
via API de configuração.
O arquivo é lido quando o Angie inicia ou quando a configuração é recarregada.state em um bloco upstream,
não deve haver diretivas server nele,
mas uma zona de memória compartilhada (zone) é necessária.sticky#
sticky cookie name [attr=value]...;sticky route $variable...;sticky learn zone=zone create=$create_var1... lookup=$lookup_var1... [header] [norefresh] [timeout=time];sticky learn [zone=zone] lookup=$lookup_var1... remote_action=uri remote_result=$remote_var [norefresh] [timeout=time];sticky configurada,
você pode usar a opção drain (PRO)
no bloco server.sticky deve ser usada após todas as diretivas
que especificam um método particular de balanceamento de carga,
caso contrário não funcionará.
Se for usada junto com a diretiva bind_conn (PRO),
então bind_conn deve vir após sticky.name) é definido pela diretiva sticky,
e seu valor corresponde ao sid
da diretiva server.
Este valor é posteriormente hasheado se sticky_secret estiver definido.path=/ é definido.
Valores de atributos podem conter variáveis.
Para remover um atributo, defina-o como um valor vazio: attr=.
Por exemplo, sticky cookie path= omite o atributo path.srv_id por 1 hora,
usando um domínio de uma variável:upstream backend {
server backend1.example.com:8080;
server backend2.example.com:8080;
sticky cookie srv_id domain=$my_domain max-age=3600;
}
route,
depois o argumento de consulta route:upstream backend {
server backend1.example.com:8080 "sid=server 1";
server backend2.example.com:8080 "sid=server 2";
sticky route $cookie_route $arg_route;
}
create e lookup definem como gerar e localizar sessões,
e ambos aceitam múltiplas variáveis.create.
Por exemplo, pode vir de um cookie de resposta.zone name:size.
Se não usada por duração timeout (padrão: 1 hora), a sessão expira.norefresh.lookup,
usando a primeira variável não vazia listada.
Se nenhuma for encontrada, é uma nova requisição.header para criar a sessão ao receber cabeçalhos de resposta
em vez de após o processamento completo da resposta.examplecookie:upstream backend {
server backend1.example.com:8080;
server backend2.example.com:8080;
sticky learn
create=$upstream_cookie_examplecookie
lookup=$cookie_examplecookie
zone=client_sessions:1m;
}
remote_action e remote_result
para gerenciar IDs de sessão com um armazenamento de sessão externo.
A zona de memória compartilhada atua como cache;
o armazenamento externo é autoritativo.
create não é compatível com remote_action.timeout (padrão: 1 hora),
independentemente de remote_action.norefresh para desabilitar isso.zone é opcional com remote_action.
Sem ela, o Angie sempre consulta o armazenamento externo.lookup não vazia.
Se nenhuma, recorrer ao balanceamento de carga padrão.zone estiver definida e a sessão existir, usá-la e parar.remote_action com:sid= ou de $sticky_sid.zone estiver definida.zone estiver definida) — sessão vinculada a outro servidor.
Usar remote_result para extrair o ID do servidor corrigido.remote_result usa variáveis upstream_http_*
para ler cabeçalhos da resposta do armazenamento remoto.$cookie_bar,
confirmado via $upstream_http_x_sticky_sid:http {
upstream u1 {
server srv1;
server srv2;
sticky learn zone=sz:1m
lookup=$cookie_bar
remote_action=/remote_session
remote_result=$upstream_http_x_sticky_sid;
zone z 1m;
}
server {
listen localhost;
location / {
proxy_pass http://u1/;
}
location /remote_session {
internal;
proxy_set_header X-Sticky-Sessid $sticky_sessid;
proxy_set_header X-Sticky-Sid $sticky_sid;
proxy_set_header X-Sticky-Last $msec;
proxy_pass http://remote;
}
}
}
HTTP/1.1 200 OK
...
X-Sid: web-server-01
X-Session-Backend: backend-pool-1
$upstream_http_x_sid → web-server-01$upstream_http_x_session_backend → backend-pool-1remote_result usará web-server-01
para selecionar o sid correspondente.sticky respeita os estados dos servidores upstream:down ou falhando são excluídos.max_conns são ignorados.drain (PRO) ainda podem ser selecionados para novas sessões no modo sticky quando os identificadores correspondem.sticky_strict estiver desligado,
o balanceamento de fallback é usado;
se ligado, a requisição é rejeitada.zone usada em sticky deve ser exclusiva de um único upstream.
Zonas não podem ser compartilhadas entre múltiplos blocos upstream.sticky_secret#
cookie e route.
A string pode conter variáveis, por exemplo, $remote_addr:upstream backend {
server backend1.example.com:8080;
server backend2.example.com:8080;
sticky cookie cookie_name;
sticky_secret my_secret.$remote_addr;
}
$ echo -n "<VALUE><SALT>" | md5sum
sticky_strict#
upstream#
upstream backend {
server backend1.example.com weight=5;
server 127.0.0.1:8080 max_fails=3 fail_timeout=30s;
server unix:/tmp/backend3;
server backup1.example.com backup;
}
zone#
Variáveis Integradas#
http_upstream suporta as seguintes variáveis integradas:$sticky_sessid#remote_action em sticky;
armazena o ID de sessão inicial obtido de lookup.$sticky_sid#remote_action em sticky;
armazena o ID do servidor previamente associado com a sessão.$upstream_addr#X-Accel-Redirect ou error_page, então os endereços dos servidores de diferentes grupos são separados por dois pontos, por exemplo:$upstream_bytes_received#$upstream_bytes_sent#$upstream_cache_status#MISS, BYPASS, EXPIRED, STALE, UPDATING,
REVALIDATED, ou HIT:MISS: A resposta não é encontrada no cache,
e a requisição é passada para o servidor upstream.BYPASS: O cache é ignorado,
e a requisição é passada diretamente para o servidor upstream.EXPIRED: A resposta em cache está obsoleta,
e uma nova requisição é passada para o servidor upstream para atualizar o conteúdo.STALE: A resposta em cache está obsoleta,
mas ainda é servida aos clientes
até que o conteúdo seja eventualmente atualizado do servidor upstream.UPDATING: A resposta em cache está obsoleta,
mas ainda é servida aos clientes
enquanto a atualização atualmente em andamento do servidor upstream está em progresso.REVALIDATED: A resposta em cache está obsoleta,
mas foi revalidada com sucesso
e não precisa ser atualizada do servidor upstream.HIT: A resposta foi obtida do cache.$upstream_connect_time#$upstream_header_time#$upstream_http_<name>#Server está disponível através da variável $upstream_http_server. As regras de conversão de nomes de campos de cabeçalho para nomes de variáveis são as mesmas para as variáveis que começam com o prefixo $http_. Apenas os campos de cabeçalho da resposta do último servidor são salvos.$upstream_queue_time#$upstream_response_length#$upstream_response_time#$upstream_status#$upstream_sticky_status#""NEWHITMISS$upstream_trailer_<name>#