No estoy familiarizado con el tema de CSRF ni con nginx (el servidor web externo es un Apache 2.4), pero estoy bastante seguro de que el problema es el CSRF, ya que Discourse funciona bien sin iniciar sesión y solo las solicitudes POST que se utilizan para iniciar sesión fallan aquí. Mi haproxy central tiene la IP interna 10.10.10.21, por lo tanto, he puesto
set_real_ip_from 10.10.10.21/24;
en el archivo yml para el contenedor web_only de discourse.conf. También probé con el valor predeterminado 127.0.0.1/24; pero ambos resultan en el mismo error 403 al iniciar sesión.