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