Usar um ELB por aplicativo é o caminho a seguir.
Primeiro, você pode precisar deles de qualquer forma, se cada aplicativo estiver em seu próprio domínio e você precisar dar suporte ao SSL. No momento, os Amazon ELBs só permitem um certificado SSL para cada domínio, exigindo ELBs separados para cada domínio habilitado para SSL. (Certificações SSL Wildcard sendo uma exceção).
O desafio aqui é que as verificações de saúde do ELB atualmente não podem ser direcionadas para um domínio virtual específico hospedado em uma instância do EC2. (Nenhum cabeçalho "Host:" é enviado). Os pings de saúde do ELB sempre vão para o domínio padrão, como se você tivesse carregado o endereço IP da instância do EC2 em seu navegador. Portanto, é necessário algum adesivo para receber as verificações de integridade no domínio padrão e, em seguida, responder com o status de integridade de um aplicativo específico.
Aqui está uma configuração de exemplo de trabalho que pode ser adicionada a uma diretiva Nginx server
. Seria instalado
em cada uma das instâncias do EC2 sendo balanceadas por carga.
# This goes in the 'server' block noted by 'default_server', often /etc/nginx/sites-enabled/default
# All AWS Health Checks from the ELBs arrive at the default server.
# Forward these requests on the appropriate configuration on this host.
location /health-check/ {
rewrite ^/health-check/(?<domain>[a-zA-Z0-9\.]+) /api/v1/status break;
# Lie about incoming protocol, to avoid the backend issuing a 301 redirect from insecure->secure,
# which would not be considered successful.
proxy_set_header X-Forwarded-Proto 'https';
proxy_set_header "Host" $domain;
proxy_pass http://127.0.0.1;
}
Na configuração "Health Check" do ELB para "first-application.com", você selecionaria "HTTP" e porta 80 e digitaria um caminho como:
/health-check/first-application.com
Com a configuração Nginx acima em execução no host, a solicitação seria recebida no domínio padrão
e proxy a resposta da configuração do Nginx no mesmo host para o link
Com essa abordagem, não há configuração por aplicativo no Nginx. Desde que cada aplicativo tenha um nome de domínio exclusivo, você só precisa configurar um ELB para cada aplicativo adequadamente.