Nginx-Remover WWW de HTTPS

Nginx-Remover WWW de HTTPS

Gostaria de pedir ajuda com a seguinte configuração do Nginx, para que URLs como https://www.mywebsite.comsejam reescritos como https://mywebsite.com. Atualmente 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 autoassinado usando OpenSSL no próprio servidor (Ubuntu 12.04). O que está acontecendo é que www.mywebsite.comredireciona corretamente para mywebsite.com, mashttps://www.mywebsite.com nãoredirecionar para https://www.mywebsite.com(ou seja, wwwainda aparece ao visualizar a página em um navegador). O que posso estar fazendo de errado?

Responder1

A solução é corrigir o primeiro bloco do servidor:

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

Por exemplo, você esqueceu de capturar as conexões www.mywebsite.com na porta SSL, só isso. Aliás, é a melhor forma de remover www do nome do site, boa escolha.

Responder2

Seu redirecionamento acontece em um host virtual que escuta apenas na porta 80. Para redirecionar solicitações que chegam por SSL, você precisa de um host virtual que escuta na porta 443 com SSL. A menos que todos os seus navegadores suportemSNI, você só poderá ter um host virtual SSL e, portanto, a regra precisará entrar no serverbloco SSL existente.

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

informação relacionada