Atualmente, tenho um ELB atendendo a http://www.example.org e https://www.example.org .
Gostaria de configurá-lo para que qualquer solicitação apontando para http://www.example.org seja redirecionada para https://www.example.org .
O ELB envia as solicitações https como solicitações http, usando:
server {
listen 80;
server_name www.example.org;
rewrite ^ https://$server_name$request_uri? permanent;
}
não funcionará porque as solicitações feitas para https://www.example.org ainda serão feitas para a porta 80 no nginx.
Eu sei que é possível reescrevê-lo como
server {
listen 80;
server_name www.example.org;
if ($http_x_forwarded_proto != "https") {
rewrite ^(.*)$ https://$server_name$1 permanent;
}
}
Mas tudo o que li disse que if
deveria ser evitado a todo custo na configuração do nginx, e isso seria para cada solicitação. Além disso, significa que tenho que definir uma configuração separada especial para a verificação de integridade ( conforme descrito aqui : "... quando você está atrás de um ELB, em que o ELB está agindo como ponto de extremidade HTTPS e enviando apenas tráfego HTTP para o servidor, você interrompa a capacidade de responder com uma resposta HTTP 200 OK para a verificação de integridade de que o ELB precisa ").
Estou pensando em colocar o login no código do aplicativo da Web em vez da configuração do nginx (e, para os fins desta pergunta, vamos supor que seja um aplicativo baseado no Django), mas não tenho certeza se isso seria mais caro do que a if
configuração.