Proxy reverso (Nginx) + ELB da AWS ELB: força SSL

1

Revisei / tentei sugestões anteriores encontradas na Web sem sucesso.

Atualmente, tenho uma configuração de ELB na frente do meu proxy reverso Nginx, que passa o tráfego para três ELBs distintos, que residem na frente de três aplicativos da Web distintos (executados no EC2). Preciso garantir que o tráfego que chega ao primeiro proxy ELB + Rev seja sempre SSL. O proxy rev é encaminhado para os vários aplicativos, dependendo da rota.

Aqui está o trecho do meu arquivo nginx / sites-available / example.conf:

server {
 listen 80;
 server_name staging.example.com;
 return 301 https://staging.example.com$request_uri;
}

server {
 listen 443 ssl;
 server_name staging.example.com;
 ssl_certificate /location
 ssl_certificate_key /location


 location /app1 {
  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  proxy_set_header X-Real-IP $remote_addr;
  proxy_set_header Host $http_host;
  proxy_pass http://ELB
 }

}

Ao usar o acima e tentar informações anteriores encontradas na Web, uma vez implementado, o primeiro ELB deixaria de funcionar. Se eu fosse diretamente para o tráfego de proxy de rev não estivesse passando, mas a página não estaria com erro, seria apenas em branco.

Perguntas: 1. Assumindo que minhas configurações de proxy de rev acima estão corretas, quando o tráfego se torna https e entra no ELB / Rev Proxy, ele continua via https para os outros ELBs? Em outras palavras, esses ELBs precisam ter 443 entradas abertas, ou 80 funcionarão como tráfego e depois passarão para http? 2. Preciso alterar alguma das configurações dentro da minha configuração de localização / app1, especialmente as configurações de proxy?

    
por user464180 03.11.2015 / 21:22

1 resposta

2

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!

    
por 29.01.2016 / 00:14