È una domanda legittima: potremmo semplicemente eliminarlo e ottenere lo stesso risultato (tranne… vedi più sotto).
Il confine dell’applicazione è effettivamente nginx stesso, non Discourse o Rails. Di conseguenza, la decisione su quali proxy remoti fidarsi viene presa al punto di ingresso dell’applicazione, che è nginx. Questi può poi trasmettere tale decisione a Discourse.
Per impostazione predefinita, Rails si fida solo degli indirizzi locali quando elabora x-f-f, quindi lo gestiamo in un punto diverso dove possiamo controllarlo facilmente.
In realtà, sembra che Rails non guardi nemmeno l’intestazione x-real-ip… le intestazioni che controlla sono:
forwardedclient-ipx-forwarded-for
In qualche modo è arrivato fin qui…
commit 21b562852885f883be43032e03c709241e8e6d4f (tag: v0.8.0)
Author: Robin Ward
Date: Tue Feb 5 14:16:51 2013 -0500
Initial release of Discourse
diff --git a/config/nginx.sample.conf b/config/nginx.sample.conf
new file mode 100644
index 00000000..62fabf4a
--- /dev/null
+++ b/config/nginx.sample.conf
...
+ proxy_set_header X-Real-IP $remote_addr;
Dovremo fare un po’ di indagini, ma per ora la risposta è “funziona”. Suppongo che sia così che siamo finiti in questa situazione.
Sembra che forse un gem lo utilizzi?