Puedo confirmar que la renovación de Let’s Encrypt falla. He estado ejecutando una instalación de Discourse autohospedada durante años, y muy extrañamente la renovación falló dos veces seguidas en los últimos meses. La segunda vez fue esta mañana, y por eso comencé a investigar.
Lo he rastreado hasta las siguientes dos confirmaciones (commits):
Y la línea relevante enlazada:
Hay dos problemas, creo.
Primero, return 301 https://${DISCOURSE_HOSTNAME}$request_uri; se convierte en return 301 https://<NOMBRE DE MI SERVIDOR> sin un $request_uri al final. Lo he verificado en mi instalación autohospedada, y también en la instalación autohospedada de un amigo que se configuró la semana pasada. No entiendo cómo funciona la plantilla de Discourse, así que no sé por qué se elimina.
Segundo, como mencionó @lessLost, la redirección 301 está fuera del bloque location. Creo que una redirección a nivel de servidor anula todos los bloques location. LetsEncrypt usa http para las renovaciones. Sin embargo, cualquier intento de curl -I http://TU_DOMINIO/.well-known/acme-challenge/test devolverá un 301 a https, en lugar de un 404 (que es el comportamiento esperado; queremos un 404, no un 301).
Lo he solucionado manualmente en mi instalación autohospedada, pero espero que cualquier actualización anule mis cambios. Desafortunadamente, no entiendo las plantillas lo suficiente como para enviar una solicitud de extracción (pull request) @pfaffman, o lo haría también.
Editado para añadir:
Creo que esto es un error:
Estoy bastante seguro de que LetsEncrypt usa http por defecto (por razones obvias, si el certificado ha caducado, ¡no puede renovarse!) Pero colocar el 301 a nivel de bloque server fuerza a todas las solicitudes a redirigir a https, lo cual es inconsistente con esta estrategia de renovación.