Ciao a tutti,
Ho appena scoperto a mie spese l’impostazione real_ip_header CF-Connecting-IP; di Cloudflare in nginx…
Ho una configurazione piuttosto complicata con nginx proxy manager che si trova nella sua immagine docker (sto usando SWAG di linuxserver.io, che è fantastico tra l’altro), quindi il percorso di connessione è il seguente:
Utente -> Cloudflare -> Server (1° container docker: Nginx -> 2° container docker: Discourse)
Ho entrambi i container docker nella stessa rete docker, quindi comunicano; va bene.
Ho avuto un vero problema nel cercare di ottenere l’IP di origine dell’utente nei log di Discourse. Ho letto tutti i bei thread qui e ho aggiunto il template cloudflare al mio file app.yml, ma non ha ancora funzionato…
Dopo essermi strappato i capelli, ho capito che il problema non era il template Cloudflare di per sé, ma il fatto che il container Discourse stava ottenendo l’indirizzo IP dal container NGINX e ho dovuto aggiungere il CIDR IP della rete docker a set_real_ip_from come questo:
set_real_ip_from 172.18.0.0/16;
Per aiutare i futuri hoster, sarebbe possibile aggiungere questa riga al template cloudflare? L’intervallo IP 172.18.0.0/16 è comunque privato, quindi anche se non si dispone di NPM in un container docker, non farà male aggiungere questo intervallo.
Il mio suggerimento sarebbe di cambiare questa riga in cloudflare.template.yml:
sed -i \"/sendfile on;/a $CONTENTS\\nreal_ip_header CF-Connecting-IP;\" /etc/nginx/conf.d/discourse.conf
in questa riga:
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
Cosa ne pensi?