Reverse proxy X-Forwarded-For

J’ai récemment migré mon forum vers un hébergeur beaucoup plus performant et je travaille à assurer une haute disponibilité.

Dans le proxy inverse, j’ai ajouté les en-têtes Forward Proto et For, mais la configuration nginx sur Discourse ne respectait que le Proto.

J’ai dû ajouter sous server :

set_real_ip_from loadbalancerip;
real_ip_header X-Forwarded-For;

Existe-t-il une variable d’environnement Discourse pour ajouter ces paramètres ?
Ou peut-être un argument à ajouter dans app.yml ?

Je pense que c’est ce que vous recherchez :

Non, ce guide explique comment configurer un socket nginx partagé entre le conteneur et l’hôte.

Je cherche une méthode déclarative pour inclure :

set_real_ip_from loadbalancerip;
real_ip_header X-Forwarded-For;

dans la configuration nginx des conteneurs après une reconstruction.

Vous essayez d’ajouter cela au nginx interne du conteneur ? Je pense que c’est inutile car c’est ajouté par défaut :

Cette ligne est nécessaire pour que cela fonctionne.
Sans elle, toutes les requêtes affichent encore l’adresse IP du load balancer.
Je le sais car mon Discourse était en panne à cause d’erreurs 429.

Au cas où ce ne serait pas clair, voici mon infrastructure :
utilisateur > haproxy > discourse

Bien sûr, Discourse inclut un proxy inverse nginx.

J’ai inclus les en-têtes de transfert dans haproxy, mais le nginx interne de Discourse ne prenait pas en compte l’en-tête forwarded for. J’ai dû ajouter les 2 lignes dans mon premier message et redémarrer le conteneur pour que cela fonctionne.

Utilisez-vous une configuration à deux conteneurs ?

Je ne pense pas qu’il existe de variable d’environnement intégrée pour les adresses IP de l’équilibreur de charge personnalisé, car nginx ne lit pas nativement ces variables pour le bloc server.

De plus, si vous avez modifié manuellement la configuration de nginx à l’intérieur du conteneur en cours d’exécution, elle sera effacée la prochaine fois que vous reconstruirez.

Je pense que pour rendre cela permanent et survivre aux reconstructions, vous devez utiliser la commande replace dans votre fichier app.yml (ou web_only.yml si vous avez une configuration à deux conteneurs) — descendez tout en bas de votre fichier .yml jusqu’à la section run: et ajoutez ce bloc. Cela indique au constructeur de Discourse d’injecter automatiquement vos paramètres d’adresse IP réelle après l’ouverture du bloc server { :

run:
  - replace:
      filename: /etc/nginx/conf.d/discourse.conf
      from: /server.+{/
      to: |
        server {
          set_real_ip_from 192.168.1.100; ## Remplacez par l'adresse IP/sous-réseau réelle de votre équilibreur de charge
          real_ip_header X-Forwarded-For;
          real_ip_recursive on;