Bonjour, mon Discourse est exécuté avec un proxy inverse (NPM).
Discourse ne semble pas prendre en charge le champ X-Forwarded, ce qui fait qu’il affiche en permanence l’adresse IP de mon proxy inverse lorsque l’on consulte, par exemple, l’adresse IP depuis laquelle un utilisateur s’inscrit, etc.
J’ai inspecté les requêtes sur Discourse et le champ X-Forwarded est bien présent, mais dans access.log, l’adresse IP affichée est celle du proxy inverse.
Je pense qu’il est nécessaire de modifier le modèle de configuration ou le fichier de configuration Nginx pour Discourse (et non celui de Nginx sur NPM).
Pouvez-vous m’aider à résoudre ce problème ? En effet, Discourse active le modèle web.ratelimit et génère de nombreuses erreurs 429.
J’ai un serveur Debian avec des vHosts Apache 2.4 et l’un de ces vHosts est le conteneur Docker Discourse. Sur Apache, mod_remoteip est activé (il n’y avait pas de mod_extract_forwarded), mais sans aucune option de configuration. La configuration du vHost est assez simple :
RequestHeader set X-Forwarded-Proto "https"
ProxyPreserveHost On
ProxyRequests Off
ProxyPass /.well-known !
ProxyPass / http://localhost:8083/
ProxyPassReverse / http://localhost:8083/
8083 est le port HTTP exposé du conteneur Docker Discourse.
C’est à peu près tout.
Je vois les différents visiteurs (par IP) dans les statistiques créées avec le fichier access.log d’Apache et, plus important encore, je vois aussi différentes dernières IP pour les utilisateurs (c’était une vérification simple pour moi). Il semble donc que les adresses IP des visiteurs soient exposées par le proxy Apache à Discourse. C’était déjà le cas sans mod_remoteip activé, que j’ai seulement activé il y a quelques jours.
Quoi qu’il en soit, j’ai de nouveau des problèmes maintenant. Un crawler ou une attaque DoS s’exécute sur notre serveur avec une IPv4 de Cracovie, Pologne. Il génère beaucoup d’erreurs 429. Cela me convient, mais tous les autres visiteurs reçoivent également ces erreurs.
Est-ce aussi le cas ? Donc, lorsque la limite de connexion est atteinte, tout le monde reçoit une erreur ? Ou par IP ?
Manque-t-il quelque chose dans ma configuration ou puis-je l’améliorer/l’optimiser ? Nous avons eu des problèmes avec Claudebot il y a quelques semaines et aussi il y a quelques jours, donc peut-être que la limite doit être augmentée un peu.
J’ai juste modifié app.yml et relancé une reconstruction du conteneur. Le bot est revenu presque instantanément après le redémarrage du conteneur. Je ne vois pas d’erreurs 429 pour le moment. J’espère que cela restera ainsi pour les utilisateurs « normaux ».
C’est ça le truc… Quand je vérifie la page d’administration des utilisateurs, je voyais toujours des entrées différentes pour le « dernier IP ». Donc, d’une manière ou d’une autre, Discourse voyait les vrais IP des utilisateurs, même sans mod_remoteip et sans le changement de configuration Nginx.
Quoi qu’il en soit, je suis curieux de voir si le changement de configuration Nginx a apporté la solution à ce problème !