Essa é uma boa observação, poderíamos simplesmente excluí-lo e chegar ao mesmo resultado (exceto… veja abaixo)
O limite da aplicação realmente é o próprio nginx, não o Discourse ou Rails. Portanto, a decisão sobre exatamente quais proxies remotos confiar é tomada no ponto de entrada da aplicação, que é o nginx. Ele pode então passar essa decisão para o Discourse.
Por padrão, o Rails só confia em endereços locais ao processar x-f-f, então fazemos isso em um lugar diferente onde podemos controlá-lo facilmente.
Na verdade, descobrimos que o Rails nem mesmo olha para o cabeçalho x-real-ip… os cabeçalhos que ele analisa são
forwardedclient-ipx-forwarded-for
De alguma forma, isso chegou até aqui desde o início…
commit 21b562852885f883be43032e03c709241e8e6d4f (tag: v0.8.0)
Author: Robin Ward
Date: Tue Feb 5 14:16:51 2013 -0500
Lançamento inicial do 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;
Teremos que investigar mais, mas por enquanto a resposta é “funciona”. Acho que foi assim que acabamos nessa situação.
Parece que talvez algum gem o use?