Hola a todos,
Acabo de descubrir de la manera difícil la configuración real_ip_header CF-Connecting-IP; de Cloudflare en nginx…
Tengo una configuración bastante complicada con nginx proxy manager dentro de su propia imagen de Docker (estoy usando SWAG de linuxserver.io, que es increíble, por cierto), por lo que la ruta de conexión se ve así:
Usuario -> Cloudflare -> Servidor (1er contenedor Docker: Nginx -> 2do contenedor Docker: Discourse)
Tengo ambos contenedores Docker en la misma red Docker, por lo que se comunican; eso está bien.
Tuve un problema real al intentar obtener la IP de origen del usuario en los registros de Discourse. Leí todos los buenos hilos aquí y agregué la plantilla de Cloudflare a mi archivo app.yml, pero aún así no funcionó…
Después de arrancarme los pelos, me di cuenta de que el problema no era la plantilla de Cloudflare en sí, sino el hecho de que el contenedor de Discourse estaba obteniendo la dirección IP del contenedor de NGINX y tuve que agregar el CIDR de la red Docker a set_real_ip_from de esta manera:
set_real_ip_from 172.18.0.0/16;
Para ayudar a futuros hosts, ¿sería posible agregar esta línea a la plantilla de Cloudflare? El rango de IP 172.18.0.0/16 es privado de todos modos, por lo que incluso si no tienes NPM en un contenedor Docker, no hará daño agregar este rango.
Mi sugerencia sería cambiar esta línea en cloudflare.template.yml:
sed -i \"/sendfile on;/a $CONTENTS\\nreal_ip_header CF-Connecting-IP;\" /etc/nginx/conf.d/discourse.conf
a esta línea:
sed -i \"/sendfile on;/a set_real_ip_from 172.18.0.0/16;\\n$CONTENTS\\nreal_ip_header CF-Connecting-IP;\" /etc/nginx/conf.d/discourse.conf
¿Qué opinas?