エンドユーザーの実際のIPアドレスの「信頼の連鎖」の処理

その指摘はもっともです。単に削除しても同じ結果になります(ただし…以下参照)。

アプリケーションの境界は実際には Discourse や Rails ではなく、nginx 自体です。したがって、どのリモートプロキシを信頼するかという判断は、アプリケーションのエントリポイントである nginx で行われます。そして、nginx がその判断を Discourse に渡すことができます。

デフォルトでは、Rails は x-f-f の処理時にローカルアドレスのみを信頼するため、私たちが制御しやすい別の場所でその設定を行っています。

実際には、Rails は x-real-ip ヘッダーを見ようともしないことが判明しました… Rails が参照するヘッダーは以下の通りです。

  • forwarded
  • client-ip
  • x-forwarded-for

これが何らかの理由でここから

commit 21b562852885f883be43032e03c709241e8e6d4f (tag: v0.8.0)
Author: Robin Ward
Date:   Tue Feb 5 14:16:51 2013 -0500

    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 がそれを使用しているのでしょうか?

「いいね!」 1