A documentação oficial do NGINX incentiva o uso da diretiva de retorno em vez de a diretiva de reescrita para efetuar o redirecionamento. É assim, pois a solicitação que está sendo reescrita não se destina a esse servidor, mas ainda é processada nesse bloco de servidores. Portanto, os redirecionamentos são feitos corretamente com uma diretiva de retorno, pois todo o processamento é interrompido e a resposta é enviada imediatamente. O NGINX desencoraja a reescrita para redirecionamento aqui: http://nginx.org/en/docs/http/converting_rewrite_rules.html
A sintaxe da diretiva de retorno é: URL do código de retorno; Como você estava originalmente reescrevendo permanentemente, pode usar 301 como código para responder, indicando que é um redirecionamento permanente. Seu endereço https será passado na seção de URL. Referência: http://nginx.org/en/docs/http/ngx_http_rewrite_module.html#return
Portanto, sua configuração correta seria
server {
listen 80;
server_name *.mydomain.com;
#Redirect all nonssl requests to ssl.
return 301 https://$server_name$request_uri;
}
Provavelmente, você poderá redirecionar corretamente para o seu domínio SSL, com um bloco de servidor curinga. Você também pode tentar o nome do servidor genérico sublinhado '_' ou $ host, conforme sugerido no comentário acima. Nos informe!