Força nginx para fechar a conexão

1

Temos uma configuração parecida com esta:

Cliente - > AWS ELB (balanceamento de carga tcp) - > NGINX (terminação ssl) - > servidor de aplicativos.

Queremos aproveitar os servidores de aplicativos do balanceador de carga. Fazemos isso realizando uma verificação de integridade que responde com 503 quando o nó está prestes a ser encerrado, enquanto permite que todas as solicitações pendentes sejam concluídas.

No entanto, como o nginx está configurado para usar o keep-alive, os clientes que já estabeleceram uma conexão podem continuar a enviar novas solicitações, mesmo após o nó ter sido retirado do balanceador de carga.

A configuração do cabeçalho Connection: close em todas as respostas do servidor de aplicativos não ajuda, já que o nginx (com razão, de acordo com a RFC) não passa isso para o cliente.

Existe alguma outra maneira, mas desativar completamente o keep-alive?

    
por Daniel Abrahamsson 09.05.2016 / 12:32

1 resposta

0

Nós resolvemos isso atualizando a configuração do nginx para desativar o keep-alive (configurando keepalive_requests e keepalive_timeout como 0) e recarregando o nginx como parte do procedimento de desligamento do aplicativo.

Provavelmente seria suficiente simplesmente recarregar a configuração, dado que o nginx aciona um novo processo de trabalho ao recarregar e apenas mantém o (s) trabalhador (es) antigo (s) até que eles tenham terminado seus pedidos em andamento.

    
por 31.05.2016 / 11:33