La IP real ya no se reconoce a través del proxy

En los últimos meses (no estoy seguro de cuándo empezó exactamente), he notado que mi configuración externa de nginx, documentada en Add an offline page to display when Discourse is rebuilding or starting up , para reenviar la dirección IP real, está siendo ignorada.

Esta configuración externa de nginx ha funcionado durante años:

    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto https;
    proxy_set_header X-Real-IP $remote_addr;

Ahora veo todo el tráfico atribuido a la red interna de Docker en el espacio RFC1918, así:

Esto obviamente está rompiendo la función “aplicar esta penalización a otros usuarios que compartan esta dirección IP” y todos los demás usos de la dirección IP remota real.

Espero que esto haya sido abordado en algún lugar y que simplemente no esté buscando bien. :frowning: Pero agradecería cualquier indicación sobre qué podría haber cambiado, para poder adaptarme.

Recuerdo haber leído algo sobre esto recientemente, pero tampoco lo consigo encontrar. Handling the "chain of trust" of the end user's real IP - #8 by supermathie incluye un enlace a la plantilla de Cloudflare, que creo que podría ser un buen modelo.

Esto es lo que estoy haciendo y parece que sigue funcionando (en «Discourse 2026.6.0-latest - GitHub - discourse/discourse: A platform for community discussion. Free, open, simple. · GitHub versión 5c507d8359f4d6e8a5d98780c622d51cedbd9bd7»)

after_bundle_exec:
  - replace:
    filename: /etc/nginx/conf.d/discourse.conf
    from: "types {"
    to: |
      set_real_ip_from 192.168.1.0/24;
      set_real_ip_from 192.168.11.0/24;
      set_real_ip_from 172.16.0.0/12;
      set_real_ip_from 10.0.0.0/8;
      real_ip_recursive on;
      real_ip_header X-Forwarded-For;
      types {

Probablemente relacionado con este commit: FIX: nginx sample configuration should be setting x-f-f to the end us… · discourse/discourse@b4a3389 · GitHub

Esto puede ayudarte:

Como de costumbre, publicar y ver las respuestas me ayuda a encontrar otras publicaciones similares. :rofl: Por ejemplo:

¡Gracias a todos! Me pongo a configurar set_real_ip_from en el nginx del contenedor.

Voy a cubrir todo el espacio RFC1918, sin embargo. Para referencia de cualquier otra persona, sería:

after_bundle_exec:
  - replace:
    filename: /etc/nginx/conf.d/discourse.conf
    from: "types {"
    to: |
      set_real_ip_from 192.168.0.0/16;
      set_real_ip_from 172.16.0.0/12;
      set_real_ip_from 10.0.0.0/8;
      real_ip_recursive on;
      real_ip_header X-Forwarded-For;
      types {

Eso no me funciona.

Ahora entiendo por qué dejó de funcionar para mí a partir del commit mencionado; rompió la sustitución de set_real_ip que llevaba años implementada. La lógica de hacerlo más robusto es sensata, y este es un mejor camino; un cambio que rompe la compatibilidad y luego debería romper menos cosas en el futuro.

No sé por qué no se está aplicando la sustitución de after_bundle_exec, pero voy a cambiar a la inserción de archivos.

Esto me funciona; lo comparto para la próxima persona:

run:
  - file:
     path: /etc/nginx/conf.d/outlets/server/real-ip-recursive.conf
     chmod: 644
     contents: |
       real_ip_recursive on;
  - 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.conf
     chmod: 644
     contents: |
       set_real_ip_from 192.168.0.0/16;
       set_real_ip_from 172.16.0.0/12;
       set_real_ip_from 10.0.0.0/8;