Acabo de habilitar force_https en mi instalación de Discourse. La terminación de HTTPS está gestionada por un proxy inverso situado delante de él. Al activar force_https, la mayoría de los enlaces internos de Discourse cambian a https, pero no ocurre lo mismo con las imágenes ya existentes, en concreto con los favicons y el logotipo. Ahora, al acceder a mi sitio mediante https, aparece una advertencia de contenido mixto debido a que se incluyen imágenes que no usan https.
Los enlaces pueden convertirse a https volviendo a subir las imágenes o ejecutando SiteIconManager.ensure_optimized! desde la consola de Rails; por lo tanto, parece que el enlace está almacenado en caché en algún lugar y no se actualiza al cambiar force_https.
Discourse debería actualizar los enlaces a las imágenes subidas (y probablemente a todas las cargas) cuando se active o desactive force_https. O, incluso mejor, sería no incluir el esquema en esos enlaces, aunque no sé si eso es posible.
Construyo imágenes de Docker (separando web_only y data) con el repositorio discourse_docker y ejecuto las imágenes en una nube de Kubernetes detrás de un proxy que gestiona la terminación de HTTPS. El contenedor de Discourse solo escucha en el puerto 80 y no habilité las plantillas de SSL y Let’s Encrypt en el archivo de configuración del contenedor. Parece que la plantilla de Let’s Encrypt es la que establece force_https en true, por lo que para mi configuración no estaba habilitada de forma predeterminada.
No del todo; se habilita al aprovisionar, pero la configuración predeterminada del sitio es false.
También he visto que la gente deshabilita la configuración del sitio mientras intenta solucionar problemas, porque se muestra como una configuración ‘modificada’.
Esto es un problema incluso si el proxy envía la cabecera X-Forwarded-Proto y demás.
Alternar la configuración del sitio force_https no actualizará el protocolo de la URL del logotipo hasta que se haya limpiado la caché de icon_manager. Agregar force_https a las configuraciones observadas para el administrador de iconos es probablemente la solución más sencilla.
¡Correcto! Si realizas una instalación estándar, se configura automáticamente, por eso sospeché que esta no era una instalación estándar.
Estoy bastante seguro de que en el sitio de GKE que administro se establece con una variable de entorno DISCOURSE_FORCE_HTTPS y funciona como se espera. Pero pasó mucho tiempo desde que lo configuré, así que podría estar olvidando algo.