Tenho uma certificação SSL curinga e estou tentando redirecionar todo o tráfego não SSL para SSL. Atualmente, estou usando o seguinte para redirecionar o URL não subdomainded que está funcionando bem.
server {
listen 80;
server_name mydomain.com;
#Rewrite all nonssl requests to ssl.
rewrite ^ https://$server_name$request_uri? permanent;
}
quando faço a mesma coisa para * .mydomain.com, ele redireciona logicamente para
https://%2A.mydomain.com/
Como você redireciona todos os subdomínios para seus equivalentes https?
Respostas:
Isso é tudo...
fonte
$host
variável?$request_uri
?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
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!
fonte
return
seja geralmente melhor, a configuração sugerida não está correta, pois ainda usa $ server_name para o redirecionamento, que será "* .mydomain.com". A correção correta já foi descrita por @cjc no comentário acima -$host
deve ser usada em vez de$server_name
.return 301 https://$host$request_uri;
return 301 https://$server_name$request_uri;
para que usem https na porta 443. O problema é que o URL redirecionado ainda tem o número da porta original. 80 não é um problema, mas 8080 sai comohttps://example.com:8080
Tente algo como isto:
O problema é definir o servidor curinga e fazer redirecionamentos com base em seu nome.
fonte