这确实是个好问题,我们直接删除它也能得到相同的结果(不过……请看下文)
应用边界实际上是 nginx 本身,而不是 Discourse 或 Rails。因此,关于信任哪些远程代理的具体决策是在应用入口点(即 nginx)做出的。然后,nginx 可以将该决策传递给 Discourse。
默认情况下,Rails 在处理 x-f-f 时只信任本地地址,因此我们在另一个可以方便控制的地方进行处理。
实际上,Rails 甚至不查看 x-real-ip header……它查看的 header是
forwardedclient-ipx-forwarded-for
不知为何,这个设置一路传了下来……
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;
我们需要进一步调查,但目前的回答是“它能工作”。我想这就是我们最初变成这样的原因。
看起来可能是某个 gem 在使用它?