Hola a todos. Recientemente configuré mi instalación de Discourse usando AWS CloudFront (CF) para la aceleración completa del sitio, y la descarga de SSL utilizando certificados de AWS en CF. Tenga en cuenta que esta instalación se desvía de la guía oficial con respecto a la configuración de CDN y SSL, por lo que podría ser controvertida y generar problemas de soporte en el futuro. Así que, ¡cuidado, que hay dragones aquí! Comparto la configuración que funcionó para mí aquí:
-
Configure Discourse para que escuche solo en el puerto 80 y deshabilite Let’s Encrypt comentando las líneas indicadas en app.yml:
-
Configure Discourse para que preste atención a la cabecera de CF,
cloudfront-forwarded-proto, en lugar dex-forwarded-proto(que CF no pasa y, extrañamente, no se puede configurar para que pase al origen… ¡qué locura!
)
-
Configure su distribución de CF con un CNAME para el nombre de host público deseado (por ejemplo,
forum.example.com) utilizando un certificado de AWS ACM (que usted generó). -
Configure el origen de CF utilizando la IP elástica pública del servidor EC2 que aloja Discourse (por ejemplo,
ec2-xxx-xxx-xxx-xxx.compute-1.amazonaws.com). configúrelo solo para HTTP (es decir, solo puerto 80, sin 443). No necesita configurar su origen con un nombre de host elegante en DNS comoforum-origin.example.com. El nombre de host o la IP de EC2 funcionan bien. -
Configure los “comportamientos” de CF para las diferentes rutas de solicitud. La clave aquí es configurar el comportamiento de caché para las cosas que son obviamente recursos estáticos; y configurar la no caché para todo lo demás (es decir, esas solicitudes simplemente se pasan tal cual al origen sin caché). Otra cosa clave aquí es que la última regla de paso (“predeterminada”) utiliza una “política de solicitud de origen” personalizada que pasa todas las cabeceras originales al origen además de la cabecera
cloudfront-forwarded-protode CF. Configure también las redirecciones de HTTP a HTTPS en sus comportamientos, de modo que todas las solicitudes de los usuarios finales sean forzadas a HTTPS por CF.
-
No configure
DISCOURSE_CDN_URL. -
Habilite
force https. -
No configure “long polling base url”, déjelo en blanco. A pesar de todas las advertencias sombrías sobre lo problemático que es al pasarlo a través de un proxy, a mí me está funcionando bien hasta ahora. Quizás el tiempo de actividad (keep alive) predeterminado de CF es lo suficientemente largo como para evitar que se caiga la conexión.
Creo que eso es todo… ![]()
El resultado final es que todas las solicitudes, HTTP/documentos, todos los recursos estáticos de soporte, todas las llamadas AJAX, etc., se atienden en el mismo nombre de dominio (por ejemplo, forum.example.com). El comportamiento de caché (y el comportamiento de paso) lo dictan sus “comportamientos” configurados en CF. Y todas las conexiones se cifran utilizando certificados de AWS ACM terminados en el borde de CF, y luego el tráfico sin cifrar/HTTP se envía de regreso al servidor de origen.
Me atrevo a decir que esto podría ser más limpio que lo que meta.discourse.org tiene ahora mismo
.


