Proxy inverso X-Forwarded-For

Recientemente migré mi foro a un servidor mucho más eficiente y estoy trabajando para lograr alta disponibilidad.

En el proxy inverso, agregué los encabezados Forward Proto y For, pero la configuración de nginx en Discourse solo respetó el Proto.

Tuve que agregar lo siguiente bajo server:

set_real_ip_from loadbalancerip;
real_ip_header X-Forwarded-For;

¿Existe una variable de entorno de Discourse para agregar esto?
¿O quizás un argumento que pueda añadir a app.yml?

Creo que esto es lo que estás buscando:

No, esta guía explica cómo configurar un socket de nginx que se comparte entre el contenedor y el host.

Estoy intentando encontrar una forma declarativa de incluir:

set_real_ip_from loadbalancerip;
real_ip_header X-Forwarded-For;

en la configuración de nginx en los contenedores después de una reconstrucción.

¿Estás intentando agregar esto al nginx interno del contenedor? Creo que es innecesario, ya que se agrega de forma predeterminada:

Esta línea es necesaria para que funcione.
Sin ella, todas las solicitudes siguen mostrando la IP del balanceador de carga.
Lo sé porque mi Discourse estuvo caído debido a errores 429.

Por si no está claro, esta es mi infraestructura:
usuario > haproxy > discourse

Por supuesto, Discourse incluye un proxy inverso nginx.

Incluí los encabezados de reenvío en haproxy, pero el nginx interno de Discourse no respetaba el campo ‘forwarded for’. Tuve que agregar las 2 líneas en mi publicación original y reiniciar el contenedor para que funcionara.

¿Estás utilizando una configuración de dos contenedores?

No creo que exista una variable de entorno integrada para las direcciones IP del equilibrador de carga personalizado, ya que nginx no lee esas variables de forma nativa para el bloque server.

Además, si editaste manualmente la configuración de nginx dentro del contenedor en ejecución, se borrará la próxima vez que reconstruyas.

Creo que, para que sea permanente y sobreviva a las reconstrucciones, necesitas usar el comando replace en tu archivo app.yml (o web_only.yml si es de dos contenedores). Desplázate hasta el final de tu archivo .yml hasta la sección run: y agrega este bloque. Esto le indica al constructor de Discourse que inyecte automáticamente tus configuraciones de IP real después de que se abra el bloque server {:

run:
  - replace:
      filename: /etc/nginx/conf.d/discourse.conf
      from: /server.+{/
      to: |
        server {
          set_real_ip_from 192.168.1.100; ## Reemplaza con tu IP/subred real del equilibrador de carga
          real_ip_header X-Forwarded-For;
          real_ip_recursive on;