Salut à tous,
Je viens de découvrir de la manière longue et difficile le réglage real_ip_header CF-Connecting-IP; de Cloudflare dans nginx…
J’ai une configuration assez compliquée avec nginx proxy manager dans sa propre image docker (j’utilise SWAG de linuxserver.io, qui est génial au passage), donc le chemin de connexion ressemble à ceci :
Utilisateur -> Cloudflare -> Serveur (1er conteneur docker : Nginx -> 2ème conteneur docker : Discourse)
J’ai les deux conteneurs docker sur le même réseau docker, donc ils communiquent ; ça va.
J’ai eu un vrai problème pour obtenir l’IP d’origine de l’utilisateur dans les logs de Discourse. J’ai lu tous les bons fils de discussion ici et j’ai ajouté le modèle cloudflare à mon fichier app.yml, mais ça n’a toujours pas fonctionné…
Après m’être arraché les cheveux, j’ai réalisé que le problème n’était pas le modèle Cloudflare en soi, mais le fait que le conteneur Discourse recevait l’adresse IP du conteneur NGINX et que je devais ajouter le CIDR IP du réseau docker à set_real_ip_from comme ceci :
set_real_ip_from 172.18.0.0/16;
Afin d’aider les futurs hébergeurs, serait-il possible d’ajouter cette ligne au modèle cloudflare ? La plage IP 172.18.0.0/16 est de toute façon privée, donc même si vous n’avez pas NPM dans un conteneur docker, cela ne fera pas de mal d’ajouter cette plage.
Ma suggestion serait de changer cette ligne dans cloudflare.template.yml :
sed -i \"/sendfile on;/a $CONTENTS\\nreal_ip_header CF-Connecting-IP;\" /etc/nginx/conf.d/discourse.conf
par cette ligne :
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’en pensez-vous ?