정당한 지적입니다. 해당 헤더를 단순히 삭제해도 동일한 결과를 얻을 수 있습니다(다만… 아래를 참고하세요).
애플리케이션 경계는 실제로 Discourse나 Rails가 아니라 nginx 자체입니다. 따라서 정확히 어떤 원격 프록시를 신뢰할지에 대한 결정은 애플리케이션의 진입점인 nginx에서 내려집니다. 이후 nginx는 그 결정을 Discourse에 전달할 수 있습니다.
기본적으로 Rails는 x-f-f(x-forwarded-for)를 처리할 때 로컬 주소만 신뢰합니다. 따라서 우리는 이를 쉽게 제어할 수 있는 다른 지점에서 처리하고 있습니다.
사실 Rails는 x-real-ip 헤더를 확인조차 하지 않는 것으로 밝혀졌습니다… Rails가 확인하는 헤더는 다음과 같습니다.
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이 이를 사용하는 것 같습니다?