mcdanlj
(Michael K Johnson)
16 Julio, 2026 13:02
1
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. Pero agradecería cualquier indicación sobre qué podría haber cambiado, para poder adaptarme.
pfaffman
(Jay Pfaffman)
16 Julio, 2026 13:27
2
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.
run:
- file:
path: /etc/nginx/conf.d/outlets/server/real-ip-header.conf
chmod: 644
contents: |
real_ip_header cf-connecting-ip;
- exec:
cmd:
# avoid the trap of specifying both URLs on one curl line; the data might not have a final newline
# print sprintf looks dubious at first, but avoids the problem of "how many times do you backslash a \\\\n"
- curl -s https://www.cloudflare.com/ips-v4/ | awk '{print sprintf("set_real_ip_from %s;", $0)}' > /etc/nginx/conf.d/outlets/server/set-real-ip-from-cloudflare.conf
- curl -s https://www.cloudflare.com/ips-v6/ | awk '{print sprintf("set_real_ip_from %s;", $0)}' >> /etc/nginx/conf.d/outlets/server/set-real-ip-from-cloudflare.conf
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:
Antecedentes
Discourse debe conocer la dirección IP real del usuario final.
Sin embargo, un usuario final nunca se conecta directamente a Discourse, ya que siempre hay uno o más servidores web upstream (nginx ejecutándose en el contenedor de Discourse) de por medio. Por lo tanto, necesitamos una forma de transmitir esa información a Discourse de manera confiable.
La solución es el encabezado x-forwarded-for. En este tema describiré los mecanismos específicos para manejar adecuadamente esa info…
mcdanlj
(Michael K Johnson)
16 Julio, 2026 15:16
4
Como de costumbre, publicar y ver las respuestas me ayuda a encontrar otras publicaciones similares. Por ejemplo:
Hi,
I have researched quite a lot but nothing seems to work with me.
I have a discourse setup installed. And I have this remote reverse proxy server that acts as a HTTPS layer between the user and the main discourse server..
[image]
I have included these revers proxy settings properly.. But why does it still show my Reverse Proxy server’s IP Address (hostname to be specific)
[image]
¡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 {
mcdanlj
(Michael K Johnson)
16 Julio, 2026 17:07
5
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;