Usar um ELB por aplicativo é o caminho a seguir aqui.
Primeiro, você pode precisar deles de qualquer maneira, se cada aplicativo estiver em seu próprio domínio e precisar oferecer suporte a SSL. Atualmente, os Amazon ELBs permitem apenas um certificado SSL para cada domínio, exigindo ELBs separados para cada domínio ativado para SSL. (Certificações SSL curinga sendo uma exceção).
O desafio aqui é que atualmente as verificações de integridade do ELB 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 integridade 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 no seu navegador. Portanto, é necessária alguma cola 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á um exemplo de configuração de trabalho que pode ser adicionado a uma server
diretiva Nginx . Ele seria instalado em cada uma das instâncias do EC2 com balanceamento de 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 "Verificação de integridade" do ELB para "first-application.com", você selecionaria "HTTP" e a porta 80 e insira um caminho como:
/health-check/first-application.com
Com a configuração do Nginx acima em execução no host, a solicitação seria recebida no domínio padrão e forneceria proxy da resposta da configuração do Nginx no mesmo host para https://first-application.com/api/v1/status
Com essa abordagem, não há configuração por aplicativo no Nginx. Desde que cada aplicativo tenha um nome de domínio exclusivo, você precisa apenas configurar um ELB para cada aplicativo adequadamente.