Esta é uma versão simplificada da sua configuração atual (menos todos os bits que atualmente não farão nada de conteúdo) com algumas notas adicionadas para que você possa ver o que está acontecendo. As duas últimas linhas apenas continuam enviando as coisas de volta ao começo. Daí para muitos erros de redirecionamentos.
server {
listen my_server_IP; #listen on IP x.x.x.x
listen my_server_IP:443 ssl; #listen on IP x.x.x.x on 443
server_name example.com www.example.com; #Of the requests on IP x.x.x.x look for those with with one of these headers. send to line below
return 301 https://example.com$request_uri; #Send everything to the line above
}
Isto é o que você precisa, você pode usar uma declaração if
, mas não permite que desta vez, apenas para que você possa ver claramente o que está acontecendo. É mais linhas, mas vai funcionar.
server {
listen my_server_IP;
server_name example.com www.example.com; #Listen for non-https requests
return 301 https://example.com$request_uri; #Send to the correct https address
}
server {
listen my_server_IP:443 ssl;
server_name www.example.com; #Listen for https (www) requests
return 301 https://example.com$request_uri; #Send to the correct https
ssl_certificate /home/example/ssl.cert;
ssl_certificate_key /home/example/ssl.key;
}
server {
listen my_server_IP:443 ssl;
server_name example.com;
ssl_certificate /home/example/ssl.cert;
ssl_certificate_key /home/example/ssl.key;
<Rest of your config from above, fastcgi etc>
}