Nginx-Remove WWW de HTTPS

1

Gostaria de pedir ajuda com a seguinte configuração do Nginx, para que URLs como https://www.mywebsite.com sejam reescritas como https://mywebsite.com . No momento, estou usando a seguinte configuração:

server {
    server_name www.mywebsite.com;
    return 301 $scheme://mywebsite.com$request_uri;
}
server {
    listen 80;
    server_name mywebsite.com;

    # Some more settings...
}
server {
    listen 443 ssl;
    server_name mywebsite.com;

    ssl_certificate path_to_ssl_certificate;
    ssl_certificate_key path_to_ssl_certificate_key;

    # Some more settings...
}

Caso isso seja importante, o certificado que estou usando é um certificado SSL curinga que foi auto-assinado usando o OpenSSL no próprio servidor (Ubuntu 12.04). O que está acontecendo é que www.mywebsite.com redireciona corretamente para mywebsite.com , mas https://www.mywebsite.com não redireciona para https://www.mywebsite.com (ou seja, o www ainda aparece ao visualizar a página em um navegador) . O que posso estar fazendo errado?

    
por NetStudent 05.06.2012 / 01:38

2 respostas

3

A solução está corrigindo o primeiro bloco de servidor para isso:

server {
    listen 80;
    listen 443;
    server_name www.mywebsite.com;
    return 301 $scheme://mywebsite.com$request_uri;
}

Por exemplo você esqueceu de pegar as conexões do www.mywebsite.com na porta ssl, isso é tudo. By the way, é a melhor maneira de remover www do nome do site, boa escolha.

    
por 05.06.2012 / 18:56
0

Seu redirecionamento acontece em um host virtual que escuta apenas na porta 80. Para redirecionar as solicitações recebidas por SSL, você precisa de um host virtual que atenda na porta 443 com SSL. A menos que todos os seus navegadores suportem SNI , você só pode ter um host virtual SSL e, portanto, a regra precisa entrar em seu ambiente existente. SSL server block.

if ($host = www.mywebsite.com) {
    rewrite ^ https://mywebsite.com$request_uri? permanent;
}
    
por 05.06.2012 / 21:46