Quais são as configurações ideais para usar o Apache ou o NGINX como servidor de back-end para o ELB?

4 minuto de leitura
0

Quero usar uma instância do Amazon Elastic Compute Cloud (Amazon EC2) executando Apache ou NGINX como meu servidor de back-end para o Elastic Load Balancing (ELB). Mas não sei quais configurações usar para obter o melhor desempenho.

Resolução

As melhores configurações para um balanceador de carga dependem do seu caso de uso. Para obter o melhor desempenho, analise os tempos de resposta do seu aplicativo de back-end e os requisitos de seus clientes.

Se o aplicativo de back-end estiver executando o Apache ou o NGINX, analise os seguintes parâmetros:

Tempo limite do cabeçalho do cliente (Timeout no Apache; cliente_header_timeout no NGINX):
Defina o tempo limite do aplicativo para um valor maior do que o valor do tempo limite de inatividade do balanceador de carga. Faça isso para garantir que o balanceador de carga feche corretamente as conexões ociosas. Se o servidor de back-end encerrar uma conexão sem a notificação adequada ao balanceador de carga, você poderá receber um erro 504.

Keep-alive (KeepAlive no Apache; keepalive_disable no NGINX):
Ative o keep-alive para reduzir a utilização da CPU e melhorar o tempo de resposta. Com o keep-alive ativado, o balanceador de carga não precisa estabelecer uma nova conexão TCP para cada solicitação HTTP.

Tempo limite do keep-alive (KeepAliveTimeout no Apache; keepalive_timeout no NGINX):

Quando a opção keep-alive estiver ativada, escolha um tempo limite de manutenção de atividade maior do que o tempo limite de inatividade do balanceador de carga.

Tempos limite de leitura (RequestReadTimeout no Apache; client_header_timeout e client_body_timeout no NGINX):
Defina tempos limite de leitura adequados aos tempos de resposta do seu aplicativo. Faça isso para garantir que seu balanceador de carga mantenha a conexão aberta por tempo suficiente para receber o cabeçalho e o corpo da solicitação.

Aviso: certifique-se de que o valor do tempo limite de inatividade do balanceador de carga seja menor do que o tempo limite do back-end.

Número máximo de solicitações do keep-alive (MaxKeepAliveRequests no Apache; keepalive_requests no NGINX):
Essa opção define quantas solicitações uma única conexão TCP atende quando o keep-alive está ativado. Para melhor uso dos recursos, defina o número máximo de solicitações de manutenção de atividade como 100 ou mais.

AcceptFilter (AcceptFilter no Apache; accept_filter no NGINX):
O AcceptFilter está ativado por padrão e instrui o Apache a usar a opção TCP_DEFER_ACCEPT para as conexões. Essa configuração pode fazer com que o soquete TCP fique em um estado “semiaberto”. Nesse estado, o balanceador de carga presume que a conexão foi estabelecida, mas a instância de back-end não tem a conexão estabelecida. Conexões semiabertas são mais comuns em balanceadores de carga de baixo volume, em que as conexões envelhecem antes de serem usadas.

Registro em log: ative a opção %{X-Forwarded-For}i para que o Apache exiba o cabeçalho ELB x-forwarded-for em seus registros para cada solicitação. Esse cabeçalho contém o endereço IP do cliente original. A opção %D adiciona o tempo necessário para concluir cada solicitação aos registros de acesso:

LogFormat "%{X-Forwarded-For}i %h %l %u %t \"%r\" %>s %b %D \"%{Referer}i\" \"%{User-Agent}i\"" combined

Apache: O módulo de eventos Apache MPM pode fechar prematuramente as conexões dos balanceadores de carga. O fechamento prematuro de conexões gera erros HTTP 502 para o Application Load Balancer e erros HTTP 504 para o Classic Load Balancer. Em vez disso, é uma prática recomendada usar o módulo de trabalho MPM para diminuir esse comportamento.

Observação: depois de atualizar sua configuração, reinicie o Apache ou o NGINX.


Informações relacionadas

Instâncias registradas para seu Classic Load Balancer

Configurar seu Classic Load Balancer

AWS OFICIAL
AWS OFICIALAtualizada há um ano