L'IP reale non viene più riconosciuto tramite proxy

Negli ultimi mesi (non sono sicuro di quando sia iniziato esattamente), ho notato che la mia configurazione esterna di nginx, come documentato in Add an offline page to display when Discourse is rebuilding or starting up , per inoltrare l’indirizzo IP reale, viene ignorata.

Questa configurazione esterna di nginx ha funzionato per anni:

    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto https;
    proxy_set_header X-Real-IP $remote_addr;

Ora vedo tutto il traffico attribuito alla rete docker interna nello spazio RFC1918, come segue:

Questo sta ovviamente interrompendo la “applicazione di questa penalità ad altri utenti che condividono questo indirizzo IP” e tutti gli altri usi dell’indirizzo IP remoto reale.

Mi aspetto che questo sia stato affrontato da qualche parte e che io stia solo cercando male. :frowning: Ma apprezzerei dei suggerimenti su cosa potrebbe essere cambiato, a cui devo adattarmi.

Ricordo di aver letto qualcosa a riguardo di recente, ma non riesco a trovarlo neppure io. Handling the "chain of trust" of the end user's real IP - #8 by supermathie include un link al template di Cloudflare, che penso possa essere un buon modello.

Ecco cosa sto facendo e sembra funzionare ancora (al momento della versione “Discourse 2026.6.0-latest - GitHub - discourse/discourse: A platform for community discussion. Free, open, simple. · GitHub versione 5c507d8359f4d6e8a5d98780c622d51cedbd9bd7”)

after_bundle_exec:
  - replace:
    filename: /etc/nginx/conf.d/discourse.conf
    from: "types {"
    to: |
      set_real_ip_from 192.168.1.0/24;
      set_real_ip_from 192.168.11.0/24;
      set_real_ip_from 172.16.0.0/12;
      set_real_ip_from 10.0.0.0/8;
      real_ip_recursive on;
      real_ip_header X-Forwarded-For;
      types {

Probabilmente correlato a questo commit: FIX: nginx sample configuration should be setting x-f-f to the end us… · discourse/discourse@b4a3389 · GitHub

Questo potrebbe esserti utile:

Come al solito, pubblicare e vedere le risposte mi aiuta a trovare altri post simili. :rofl: ad es.

Grazie a tutti! Ora devo configurare set_real_ip_from nell’nginx del container!

Userò comunque l’intero spazio RFC1918. Per riferimento di chiunque altro, questo sarebbe:

after_bundle_exec:
  - replace:
    filename: /etc/nginx/conf.d/discourse.conf
    from: "types {"
    to: |
      set_real_ip_from 192.168.0.0/16;
      set_real_ip_from 172.16.0.0/12;
      set_real_ip_from 10.0.0.0/8;
      real_ip_recursive on;
      real_ip_header X-Forwarded-For;
      types {

Non funziona per me.

Ora capisco perché ha smesso di funzionare per me a partire dal commit di riferimento: ha rotto la sostituzione di set_real_ip che avevo in uso da anni. La logica di renderlo più robusto è sensata, e questa è una strada migliore; un cambiamento che rompe la compatibilità e poi dovrebbe rompere meno cose in futuro.

Non so perché la sostituzione di after_bundle_exec non venga applicata, ma passerò a inserire i file manualmente.

Questo funziona per me; lo condivido per la prossima persona:

run:
  - file:
     path: /etc/nginx/conf.d/outlets/server/real-ip-recursive.conf
     chmod: 644
     contents: |
       real_ip_recursive on;
  - file:
     path: /etc/nginx/conf.d/outlets/server/real-ip-header.conf
     chmod: 644
     contents: |
       real_ip_header X-Forwarded-For;
  - file:
     path: /etc/nginx/conf.d/outlets/server/set-real-ip-from.conf
     chmod: 644
     contents: |
       set_real_ip_from 192.168.0.0/16;
       set_real_ip_from 172.16.0.0/12;
       set_real_ip_from 10.0.0.0/8;