Handhabung der "Vertrauenskette" der echten IP-Adresse des Endbenutzers

Das ist fair, wir könnten es einfach löschen und zum gleichen Ergebnis kommen (außer… siehe unten)

Die Anwendungsgrenze ist tatsächlich nginx selbst, nicht Discourse oder Rails. Somit wird die Entscheidung, welchen entfernten Proxies genau vertraut wird, am Anwendungseinstiegspunkt getroffen, der nginx ist. Dieser kann diese Entscheidung dann an Discourse weiterleiten.

Standardmäßig vertraut Rails nur lokalen Adressen bei der Verarbeitung von x-f-f, daher tun wir das an einer anderen Stelle, an der wir es leicht kontrollieren können.

Tatsächlich stellt sich heraus, dass Rails den x-real-ip-Header überhaupt nicht beachtet… die Header, die es beachtet, sind

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

Irgendwie ist das bis hierher gelangt…

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;

Wir müssen noch ein bisschen recherchieren, aber für jetzt lautet die Antwort „es funktioniert“. Was ich vermute, ist der Grund, warum wir es so gemacht haben.

Sieht aus, als würde vielleicht ein Gem es verwenden?

1 „Gefällt mir“