redireciona subdomínios curinga para https (nginx)

18

Eu 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 o mesmo para * .mydomain.com, ele redireciona logicamente para

https://%2A.mydomain.com/

Como você redireciona todos os subdomínios para o equivalente em https?

    
por whatWhat 09.11.2012 / 22:45

3 respostas

38

Isso é tudo ...

server {
    listen      80;
    server_name *.mydomain.com;

     #Rewrite all nonssl requests to ssl.
     return 301 https://$host$request_uri;
}
    
por 25.06.2013 / 16:49
1

A documentação oficial do NGINX encoraja o uso da diretiva de retorno em vez de usar a diretiva de reescrita para efetuar o redirecionamento. Isso é assim, já que a solicitação que está sendo reescrita não é destinada a esse servidor, mas ainda é processada nesse bloco de servidor. Portanto, os redirecionamentos são feitos corretamente com uma diretiva de retorno, pois todo o processamento é interrompido e uma resposta é enviada imediatamente. O NGINX desencoraja a reescrita para redirecionamento aqui: link

A diretiva de sintaxe para retorno é: URL do código de retorno; Como você estava originalmente fazendo uma reescrita permanente, portanto, você pode usar 301 como o código para responder, indicando que é um redirecionamento permanente. Seu endereço https será passado na seção url. Referência: link

Assim, 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;
}

Isso provavelmente permitiria que você redirecionasse corretamente para seu domínio ssl, com um bloqueio de servidor curinga. Você também pode tentar o nome do servidor genérico de sublinhado '_' ou $ host, conforme sugerido no comentário acima. Deixe-nos saber!

    
por 12.11.2012 / 10:15
-1

Tente algo assim:

server {
  listen 80;
  server_name ~^(.*)\.mydomain\.com$;
  set $servername $1;
  rewrite ^(.*)$ https://$servername.mydomain.com/$1;
}

A captura é definir o servidor curinga e fazer redirecionamentos com base em seu nome.

    
por 12.11.2012 / 11:13

Tags