Wie erhalte ich die Benutzer-IP nach dem Commit b4a3389-Update?

Dieser Commit hat einen Konfigurationsfehler behoben, auf den du dich verlassen hast, aber der es möglicherweise auch jedem Endbenutzer ermöglicht hätte, seine IP-Adresse zu fälschen, indem er diesen Header gesetzt hat.

Es gibt tatsächlich einen einfacheren Weg, der keinen Socket erfordert – ich habe gerade einen Leitfaden geschrieben, wie man das macht.

Für deine Einrichtung @CLOUD_PHT solltest du Folgendes zu deiner Container-Definition hinzufügen (wenn bereits ein run-Abschnitt existiert, füge diese Direktiven dort hinzu, sonst füge den run-Abschnitt hinzu):

run:
  - file:
      path: /etc/nginx/conf.d/outlets/server/real-ip-header.conf
      chmod: 644
      contents: |
        real_ip_header x-forwarded-for;
  - file:
      path: /etc/nginx/conf.d/outlets/server/set-real-ip-from-host.conf
      chmod: 644
      contents: |
        set_real_ip_from 172.17.0.1;

Möglicherweise benötigst du auch Folgendes:

  - file:
      # wir müssen rekursiv aktivieren, da wir mindestens zwei Einträge haben werden; einen vom Host, einen von CloudFlare
      path: /etc/nginx/conf.d/outlets/server/real-ip-recursive.conf
      chmod: 644
      contents: |
        real_ip_recursive on;

je nachdem, ob der auf deinem Server laufende nginx den Cloudflare-Header selbst verarbeitet, um die echte IP des Endbenutzers zu bestimmen (dies wird empfohlen), oder einfach nur seinen eigenen Header darüber legt. Siehe https://meta.discourse.org/t/handling-the-chain-of-trust-of-the-end-users-real-ip/406372#p-2001772-more-than-one-proxy-7 für weitere Details.


Andere Leser: Seid euch bewusst, dass diese Direktive

run:
  - file:
      path: /etc/nginx/conf.d/outlets/server/set-real-ip-from-host.conf
      chmod: 644
      contents: |
        set_real_ip_from 172.17.0.1;

nicht für alle Einrichtungsarten geeignet ist. Mache dies nur, wenn alle Verbindungen zum Discourse-Container von dieser IP vertrauenswürdig sind.

Insbesondere ist ein bekanntes Problem bei IPv6-Einrichtungen, dass IPv6-Verbindungen zum Server von Docker über IPv4 weitergeleitet werden – die Art und Weise, wie dies geschieht, lässt alle Verbindungen so aussehen, als kämen sie von der docker0-IP-Adresse des Hosts. Wenn du die obige Direktive auf deine Einrichtung anwendest, ermöglicht es allen Benutzern, die über IPv6 verbinden, ihre IP-Adresse nach Belieben zu fälschen.