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

Понял, так что дело больше в том, как Rails или другие гемы обрабатывают заголовки, а не в том, что делает код Discourse.

Интересно, что Rails не использует X-Real-IP, который, вероятно, встречается реже, чем X-Forwarded-For, но определённо более известен, чем Forwarded и Client-IP :thinking:.

Возможно, X-Real-IP теперь устарел в конфигурации Nginx. Discourse использует его вместе с X-Forwarded-For в логах, если я правильно понимаю? Я не нашёл других явных упоминаний или использования в коде:

Нижеприведённый фрагмент выглядел неверным по двум причинам, когда я наткнулся на него при отладке общей ограничения частоты запросов (rate limiting) и записывал ошибки о невалидном IP-адресе клиента «unix:» после обновления нашего Discourse (мы используем прокси через UNIX-сокет перед контейнером и полагаемся на X-Forwarded-For).

proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;

Но я понимаю аргумент «это работает», чтобы надёжно сделать $remote_addr единственным источником истины, а real_ip_header — каноническим способом для администраторов контролировать единственный IP-адрес, который получает Discourse/Rails. Вижу, что это уже было добавлено в Serve Discourse from a subfolder (path prefix) instead of a subdomain :+1:.