Nginx, no puede redirigir el dominio www a un dominio https que no sea www cuando se usa certbot

Nginx, no puede redirigir el dominio www a un dominio https que no sea www cuando se usa certbot

A pesar de haber muchos ejemplos en línea, he probado muchas cosas, específicamente usando declaraciones if, pero hasta ahora no he podido configurar mi vhost correctamente.

Entonces mi host virtual es

    a1.example.com

www.a1.example.com should redirect to https://a1.example.com
a1.example.com should redirect to https://a1.example.com

El objetivo es redirigirlo a https sin www cada vez.

Este es mi vhost hasta ahora, estoy usando certbot

server {
     server_name a1.example.com www.a1.example.com;
     root /var/www/example/build;

     index index.html index.htm;

     location / {
          try_files $uri $uri/ =404;
     }

    listen [::]:443 ssl ipv6only=on; # managed by Certbot
    listen 443 ssl; # managed by Certbot
    ssl_certificate /etc/letsencrypt/live/a1.example.com/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/a1.example.com/privkey.pem; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot

}
server {

    if ($host = a1.example.com) {

    return 301 https://$host$request_uri;
   }
     listen 80;
     listen [::]:80;
     server_name a1.example.com www.a1.example.com;
    return 404; # managed by Certbot

}

Esto redirige de http a https, pero no puedo redirigir www a no www.

Mis registros DNS actuales son

A @ IP
A a1 IP
CNAME www domain
CNAME www.a1 www.a1.domain

Respuesta1

Creo que la mejor respuesta sobre este tema la dio @MichaelHampton.aquí. Como solución rápida puedes agregar

if ($host = www.a1.example.com) {
    return 301 https://a1.example.com$request_uri;
}

a su bloque de servidor HTTPS y cambie if ($host = a1.example.com) { ... }el bloque de servidor HTTP a

if ($host ~ ^(?:www\.)?a1\.example\.com$) {
    return 301 https://a1.example.com$request_uri;
}

De todos modos, estoy totalmente de acuerdo con Michael Hampton en que no debería permitir que certbot altere su configuración de nginx y la use solo para obtener/renovar certificados (consulte su respuesta para ver un ejemplo de configuración de nginx bien escrito).

información relacionada