Así que finalmente he encontrado tiempo para trabajar en las guías “Configuración de Let’s Encrypt con múltiples dominios” y “Redirección de dominio(s) único(s) o múltiples a tu instancia de Discourse”.
He añadido mucho más a mi archivo containers/app.yml que lo que tú hiciste y casi todo funciona correctamente.
Mi Discourse está alojado en el subdominio www y mi objetivo era redirigir las solicitudes HTTP y HTTPS desde el dominio principal (apex) al subdominio www. Esto ahora funciona, pero si voy a https://mydomain.com, aunque se redirige, Chrome muestra la siguiente advertencia en la consola:
Redirección de navegación example.com -> www.example.com porque el servidor presentó un certificado válido para www.example.com pero no para example.com. Para desactivar este tipo de redirecciones, inicia Chrome con la siguiente bandera: --disable-features=SSLCommonNameMismatchHandling
Aquí están mis añadidos al archivo app.yml:
after_ssl:
- replace:
filename: "/etc/runit/1.d/letsencrypt"
from: /--keylength/
to: "-d example.com -d www.example.com --keylength"
- replace:
filename: "/etc/nginx/conf.d/discourse.conf"
from: /return 301 https.+/
to: |
return 301 https://$host$request_uri;
- replace:
filename: "/etc/nginx/conf.d/discourse.conf"
from: /gzip on;[^\}]+\}/m
to: |
gzip on;
add_header Strict-Transport-Security 'max-age=31536000'; # recuerda el certificado durante un año y conecta automáticamente a HTTPS para este dominio
after_web_config:
- replace:
filename: /etc/nginx/nginx.conf
from: /sendfile.+on;/
to: |
server_names_hash_bucket_size 64;
sendfile on;
- file:
path: /etc/nginx/conf.d/discourse_redirect_1.conf
contents: |
server {
listen 80;
listen 443 ssl;
server_name example.com;
return 301 https://www.example.com$request_uri;
}
¿Esto parece correcto? Si es así, ¿hay alguna solución para el problema de discrepancia en el nombre del certificado?
EDITO: Tengo dos registros A, uno para el subdominio www y otro usando @ para capturar todas las solicitudes al dominio principal. Ambos apuntan a la IP de mi droplet de Digital Ocean. Supongo que esto también es correcto.
Gracias, actualmente no estoy usando Cloudflare, así que no había topado con eso antes. Tomé otro camino y seguí las guías de arriba, logrando resolver mi problema en gran medida. Publicaste justo cuando envié mi respuesta anterior.
Por favor, verifica este sitio web; ¿tiene todas las redirecciones que necesitas? Se ha realizado con un único bloque replace (ver arriba) y esta configuración de DNS (solo he censurado los registros TXT de correo electrónico):
Sí, solo prepárate para que se rompa cuando cambie la configuración de Let’s Encrypt.
Cuando Let’s Encrypt se actualizó para admitir curvas elípticas, el enfoque en el que te basas anteriormente dejó de funcionar durante un par de semanas.
Un cambio el 9 de septiembre del año pasado rompió el enfoque que estás siguiendo y, dado que la implementación no formaba parte de la instalación estándar, no fue hasta el 31 de octubre que se publicó una solución. Si revisas el tema que seguiste y el historial de ediciones en la wiki, verás que está claramente documentado.
Dado que no estás haciendo algo que requiera meterse hasta los codos en configuraciones adicionales, te desaconsejo hacerlo. Por otro lado, cuando Let’s Encrypt sí cambie y te veas afectado, podemos referirte de nuevo a este tema.