Suggestion de modèle Cloudflare pour obtenir la vraie IP des utilisateurs

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 ?

Il existe de nombreux sujets sur l’utilisation d’un proxy inverse, y compris la façon de le faire. Tout le monde n’utilise pas un proxy inverse lorsqu’il utilise Cloudflare.

Un modèle de proxy inverse pourrait être utile, car je dois le rechercher à chaque fois que je le configure sans mes scripts.

C’est vrai. Et l’inverse est également vrai : tout le monde n’utilise pas Cloudflare comme proxy inverse :wink:

Cette suggestion est vraiment destinée à faciliter la vie des personnes qui utilisent Cloudflare. Cela ne changerait rien pour ceux qui n’utilisent pas de proxy inverse dans Docker, mais pourrait potentiellement leur faire gagner des heures de recherche pour la réponse à un problème simple.

1 « J'aime »

Les personnes qui utilisent Cloudflare ont probablement une vie difficile. Vous pouvez chercher ici et trouver de nombreux exemples de comment. L’installation du modèle n’est qu’une partie des problèmes que vous pourriez rencontrer, et la plus facile à résoudre. (Je vous recommanderais d’utiliser un vrai CDN comme bunny.net qui est bon marché - mais pas gratuit - et facile à configurer, mais ce n’est pas ce que vous avez demandé.)

Bien sûr, votre problème n’avait rien à voir avec Cloudflare, mais avec le proxy inverse, donc chercher Cloudflare n’a probablement pas aidé !

Néanmoins, ajouter quelques modèles supplémentaires comme le proxy inverse (et celui que je veux vraiment - un pour précompiler les actifs et les envoyer vers S3) est une bonne idée.

Bonne chance.

1 « J'aime »