Primeiro, deixe-me ter certeza de que estou entendendo seu design corretamente:
--- HTTPS --> ELB -> nginx --- HTTP ---> ELB1 --> server1
--- HTTP ---> ELB1 --> server2
--- HTTP ---> ELB1 --> server3
Isso está correto?
Assumindo que o acima esteja correto, para garantir que apenas HTTPS insira esse EBL de primeiro / frontend, você pode configurar esse frontend ELB com um ouvinte HTTPS na porta 443. É isso.
Quanto à sua primeira pergunta, as solicitações que saem do ELB para o servidor de back-end (o frontend nginx
) serão HTTP. Você precisa se esforçar para configurar um ELB para usar SSL nas conexões de back-end.
Isso significa que os ELBs de back-end só precisam de ouvintes na porta 80, para solicitações HTTP. (Ou porta 8080, ou qualquer porta que você queira que os ELBs de backend usem.)
Uma sugestão que devo acrescentar é que você crie um grupo de segurança "frontend-elb" separado e um grupo de segurança "backend-elb" separado. O frontend ELB (e frontend nginx
instance!) Deve usar o grupo de segurança "frontelb-elb", e os ELBs de backend (e instâncias do webend backend!) Devem usar o grupo de segurança "backend-elb". O grupo de segurança "frontend-elb" deve permitir solicitações de entrada de qualquer lugar (supondo, é claro, que você queira que seus serviços fiquem publicamente disponíveis). O grupo de segurança "backend-elb", no entanto, deve permitir apenas conexões de entrada do grupo de segurança "frontend-elb". Isso garantirá que a única maneira de acessar suas webapps seja através desse frontend ELB, que, por sua vez, garante que somente solicitações HTTPS cheguem às suas aplicações web.
Quanto à sua configuração de proxy nginx
, acho que parece OK. Devo salientar, no entanto, que os ELBs da AWS irão automaticamente definir os cabeçalhos X-Forwarded-For
(e X-Forwarded-Proto
); talvez não seja necessário definir isso explicitamente em sua configuração nginx
.
Espero que isso ajude!