Nginx: eliminar WWW de HTTPS

Nginx: eliminar WWW de HTTPS

Me gustaría pedir ayuda con la siguiente configuración de Nginx, para que las URL como https://www.mywebsite.comse reescriban como https://mywebsite.com. Actualmente estoy usando la siguiente configuración:

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...
}

En caso de que eso importe, el certificado que estoy usando es un certificado SSL comodín que fue autofirmado usando OpenSSL en el propio servidor (Ubuntu 12.04). Lo que pasa es que www.mywebsite.comredirige correctamente a mywebsite.com, perohttps://www.mywebsite.com no esredirigir a https://www.mywebsite.com(es decir, wwwtodavía aparece al ver la página en un navegador). ¿Qué puedo estar haciendo mal?

Respuesta1

La solución es arreglar el primer bloque del servidor a esto:

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

Por ejemplo, olvidó capturar las conexiones www.mywebsite.com en el puerto SSL, eso es todo. Por cierto, es la mejor manera de eliminar www del nombre del sitio, buena elección.

Respuesta2

Su redirección ocurre en un host virtual que solo escucha en el puerto 80. Para redirigir las solicitudes que llegan a través de SSL necesita un host virtual que escucha en el puerto 443 con SSL. A menos que todos sus navegadores admitanSNI, solo puede tener un host virtual SSL, por lo que la regla debe incluirse en su serverbloque SSL existente.

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

información relacionada