Reverse proxy X-Forwarded-For

Ho recentemente migrato il mio forum su un host molto più performante e sto lavorando per raggiungere l’alta disponibilità.

Nel reverse proxy ho aggiunto gli header Forward Proto e For, ma la configurazione nginx su Discourse ha rispettato solo il Proto.

Ho dovuto aggiungere sotto server:

set_real_ip_from loadbalancerip;
real_ip_header X-Forwarded-For;

Esiste una variabile d’ambiente di Discourse per aggiungere queste impostazioni?
o eventualmente un argomento da aggiungere ad app.yml?

Credo che questo sia quello che stai cercando:

No, questa guida spiega come configurare un socket nginx condiviso tra il container e l’host.

Sto cercando un modo dichiarativo per includere:

set_real_ip_from loadbalancerip;
real_ip_header X-Forwarded-For;

nella configurazione di nginx nei container dopo il rebuild.

Stai cercando di aggiungerlo all’nginx interno del container? Credo che non sia necessario, dato che viene aggiunto di default:

Questa riga è necessaria affinché funzioni.
Senza di essa, tutte le richieste mostrano ancora l’IP del load balancer.
Lo so perché il mio Discourse era bloccato con errori 429.

Nel caso non fosse chiaro, questa è la mia infrastruttura:
utente > haproxy > discourse

Discourse include naturalmente un reverse proxy nginx.

Ho incluso gli header di inoltramento in haproxy, ma l’nginx interno di Discourse non rispettava l’header “forwarded for”. Ho dovuto aggiungere le due righe nel mio post originale e riavviare il container per far funzionare tutto.

Stai utilizzando un build a 2 container?

Non credo che esista una variabile d’ambiente integrata per gli IP dei bilanciatori di carico personalizzati, poiché nginx non legge nativamente queste variabili per il blocco server.

Inoltre, se hai modificato manualmente la configurazione di nginx all’interno del container in esecuzione, verrà cancellata la prossima volta che effettuerai una ricostruzione.

Penso che, per renderla permanente e farla sopravvivere alle ricostruzioni, tu debba usare il comando replace nel tuo app.yml (o web_only.yml se si tratta di un doppio container) — scorri fino in fondo al file .yml alla sezione run: e aggiungi questo blocco. Questo dice al builder di Discourse di iniettare automaticamente le tue impostazioni IP reali dopo l’apertura del blocco server {:

run:
  - replace:
      filename: /etc/nginx/conf.d/discourse.conf
      from: /server.+{/
      to: |
        server {
          set_real_ip_from 192.168.1.100; ## Sostituisci con il tuo IP/sottorete del bilanciatore di carico
          real_ip_header X-Forwarded-For;
          real_ip_recursive on;