Обработка "цепочки доверия" реального IP-адреса конечного пользователя

Справедливое замечание, мы могли бы просто удалить его и получить тот же результат (кроме… см. ниже)

Граница приложения на самом деле находится в самом nginx, а не в Discourse или rails. Поэтому решение о том, каким именно удалённым прокси доверять, принимается на входе в приложение, то есть в nginx. Затем он может передать это решение в Discourse.

По умолчанию Rails доверяет только локальным адресам при обработке x-f-f, поэтому мы делаем это в другом месте, где мы можем легко это контролировать.

На самом деле, оказывается, Rails даже не смотрит на заголовок x-real-ip… заголовки которые он смотрит это

  • forwarded
  • client-ip
  • x-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;

Придётся покопаться, но пока что ответ «оно работает». Думаю, именно так мы и оказались в такой ситуации.

Похоже, может быть, какой-то гем его использует?

1 лайк