Http nginx atrás de https ELB e redirecionamento automático de índice

2

Eu tenho um Amazon ELB que ouve o tráfego http e https. Instâncias por trás dele têm nginx na porta 80. Apenas HTTP. Então o ELB encaminha ambos https e http para http do nginx.

Quando faço uma solicitação https para uma pasta como    link ele é redirecionado automaticamente para uma versão de barra    link mas o protocolo se torna http. Pasta contém o arquivo index.html. Eu presumo que é isso que faz funcionar.

Existe alguma maneira de corrigir isso? Ou seja faça-o redirecionar para https em vez de http. Eu não posso impor https globalmente.

Minha configuração:

http {
map $http_x_forwarded_proto $thescheme {
    default $scheme;
    https https;
}

server {
    listen 80;
    server_name example.com;
    location / {
        root /var/www/html;
        add_header X1 $scheme;
        add_header X2 $thescheme;
        index index.html;
    }
}
}

Eu adicionei os cabeçalhos X1 e X2 para verificar qual protocolo o nginx acha que é usado e se o cabeçalho X-Forwarded-Proto é adicionado pelo ELB. X1 é http, X2 é https para o pedido de exemplo.

Eu achei que adicionar

if (-d $request_filename) {
    rewrite [^/]$ $thescheme://$http_host$uri/ permanent;
}

dentro da localização ajuda, mas se perguntando se existe uma solução melhor.

    
por clorz 15.07.2016 / 22:17

1 resposta

2

  • Em vez de usar rewrite , recomendamos seguir as práticas recomendadas e usar o retorno diretiva em vez disso. Usar isso pode ser parecido com o seguinte:

    if ($http_x_forwarded_proto = 'http') {
        return 301 https://example.com$request_uri;
    }
    
  • Além disso, para aplicar o uso de HTTPS a todos os clientes que fizeram uma vez HTTPS , pense em adicionar um HTTP Cabeçalho de Segurança de Transporte Estrito (HSTS) . HSTS é

    a web security policy mechanism which helps to protect websites against protocol downgrade attacks and cookie hijacking.

    Para fazer uso dele, a diretiva poderia se parecer com o seguinte:

     add_header Strict-Transport-Security max-age=31536000;
    
por 16.07.2016 / 02:13