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.
Respostas:
Se estiver funcionando corretamente, não se assuste. http://wiki.nginx.org/IfIsEvil
fonte
location {}
, dentroserver {}
. (Mas por favor deixe-me saber se isso é incorreto!)Configuração do NGINX
fonte
HTTP:1443
. Rejeita oHTTP:80
porque o redirecionamento 301.Essa solução usa lógica condicional, mas como a resposta aceita sugere, também acho que isso está ok. Ref: https://stackoverflow.com/questions/4833238/nginx-conf-redirect-multiple-conditions
Além disso, isso não requer a abertura de portas adicionais nas configurações de segurança do aws para a imagem. Você pode encerrar o SSL no AWS LB e rotear o tráfego https para a porta http 80 na sua instância.
Neste exemplo, a verificação de integridade do LB atinge / integridade na porta 80, que é direcionada para o servidor de aplicativos, portanto, a verificação de integridade valida o nginx e seu aplicativo está respirando.
fonte
Agora você pode criar um novo ouvinte nas configurações do AWS Load Balancer que redireciona a porta HTTP 80 para a porta HTTPS 443. Portanto, você não precisa mais tocar na configuração do nginx / apache.
fonte