Redirecione um site inteiro para URLs seguros usando nginx

Na configuração do seu site, você precisará de dois serverblocos.

O primeiro escuta seu site na porta 80 e retorna uma resposta 301 (movido permanentemente) com o mesmo URL que o prefixo requerido com em httpsvez dehttp

O segundo é onde você coloca todas as informações reais do seu site, e ele escuta 443 como qualquer outro site seguro.

Se uma solicitação chegar na porta 80, ela será refletida no primeiro bloco e a solicitação subsequente (presumindo que o redirecionamento seja seguido corretamente) atingirá o segundo como planejado. O 301 tem o benefício adicional de ser armazenado em cache do lado do cliente, o que impedirá que solicitações subsequentes da mesma pessoa cheguem ao site inseguro.

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

server
{
listen
443 ssl;
server_name example
.com;
...
}

Muitas outras soluções que vi queriam fazer reescritas de URL condicionais complexas. Achei que a solução acima é muito mais elegante.