Cómo obtener la IP del usuario después de actualizar el commit b4a3389

Ese commit corrigió un error de configuración en el que te estabas apoyando, pero también es posible que hubiera permitido que cualquier usuario final falsificara su dirección IP estableciendo ese encabezado.

En realidad, hay una forma más sencilla que no requiere el uso de un socket: acabo de escribir una guía sobre cómo hacerlo.

Para tu configuración @CLOUD_PHT, deberías añadir esto a la definición de tu contenedor (si ya existe una sección run, añade estas directivas a ella; de lo contrario, añade la sección run):

run:
  - file:
      path: /etc/nginx/conf.d/outlets/server/real-ip-header.conf
      chmod: 644
      contents: |
        real_ip_header x-forwarded-for;
  - file:
      path: /etc/nginx/conf.d/outlets/server/set-real-ip-from-host.conf
      chmod: 644
      contents: |
        set_real_ip_from 172.17.0.1;

También puede que necesites lo siguiente:

  - file:
      # necesitamos activar el modo recursivo ya que tendremos al menos dos entradas: una del host y otra de CloudFlare
      path: /etc/nginx/conf.d/outlets/server/real-ip-recursive.conf
      chmod: 644
      contents: |
        real_ip_recursive on;

dependiendo de si el nginx que se ejecuta en tu servidor procesa él mismo el encabezado de Cloudflare para determinar la IP real del usuario final (esto se sugiere) o simplemente añade el suyo propio encima. Consulta https://meta.discourse.org/t/handling-the-chain-of-trust-of-the-end-users-real-ip/406372#p-2001772-more-than-one-proxy-7 para más detalles.


Otros lectores: tened en cuenta que esta directiva

run:
  - file:
      path: /etc/nginx/conf.d/outlets/server/set-real-ip-from-host.conf
      chmod: 644
      contents: |
        set_real_ip_from 172.17.0.1;

no es apropiada para todas las configuraciones. Solo haced esto si todas las conexiones al contenedor de Discourse desde esta IP son de confianza.

Específicamente, un problema conocido con las configuraciones IPv6 es que las conexiones IPv6 al servidor se reenvían por Docker a través de IPv4: la forma en que se hace hace que todas las conexiones parezcan provenir de la dirección IP docker0 del host. Si aplicáis la directiva anterior a vuestra configuración, permitiréis que todos los usuarios que se conecten a través de IPv6 falsifiquen su dirección IP a su antojo.