Reverse-Proxy X-Forwarded-For

Ich habe mein Forum kürzlich auf einen deutlich leistungsfähigeren Host migriert und arbeite an Hochverfügbarkeit.

Im Reverse-Proxy habe ich die Header Forward Proto und For hinzugefügt, aber die Nginx-Konfiguration in Discourse berücksichtigte nur Proto.

Ich musste unter server folgendes hinzufügen:

set_real_ip_from loadbalancerip;
real_ip_header X-Forwarded-For;

Gibt es eine Discourse-Umgebungsvariable, um diese hinzuzufügen?
Oder eventuell ein Argument, das ich in app.yml hinzufügen kann?

Ich glaube, das ist, wonach du suchst:

Nein, diese Anleitung erklärt, wie man einen nginx-Socket einrichtet, der zwischen dem Container und dem Host gemeinsam genutzt wird.

Ich versuche, eine deklarative Möglichkeit zu finden, folgendes in die nginx-Konfiguration in Containern nach dem Neustart aufzunehmen:

set_real_ip_from loadbalancerip;
real_ip_header X-Forwarded-For;

Du versuchst, dies zum internen Nginx des Containers hinzuzufügen? Ich glaube, das ist unnötig, da es standardmäßig hinzugefügt wird:

Diese Zeile ist erforderlich, damit das funktioniert.
Ohne sie haben alle Anfragen weiterhin die IP-Adresse des Load Balancers.
Das weiß ich, weil mein Discourse wegen 429-Fehlern ausgefallen war.

Falls es nicht klar ist, so sieht meine Infrastruktur aus:
Benutzer > haproxy > discourse

Discourse beinhaltet natürlich einen nginx rproxy.

Ich habe die Weiterleitungs-Header in haproxy eingefügt, aber der interne nginx von Discourse hat den „Forwarded-For“-Header nicht beachtet. Ich musste die zwei Zeilen in meinem Eröffnungspost hinzufügen und den Container neu starten, damit es funktioniert.

Verwendest du ein 2-Container-Setup?

Ich glaube nicht, dass es eine integrierte Umgebungsvariable für benutzerdefinierte Load-Balancer-IPs gibt, da Nginx diese Variablen für den Server-Block nicht nativ ausliest.

Außerdem werden Änderungen, die du manuell an der Nginx-Konfiguration innerhalb des laufenden Containers vorgenommen hast, beim nächsten Neuaufbau verworfen.

Ich denke, um dies dauerhaft zu machen und Neuaufbauten zu überstehen, musst du den replace-Befehl in deiner app.yml (oder web_only.yml bei Dual-Container-Setup) verwenden. Scrolle ganz nach unten in deiner .yml-Datei zum Abschnitt run: und füge diesen Block hinzu. Er weist den Discourse-Builder an, deine echten IP-Einstellungen automatisch nach dem Öffnen des server {-Blocks einzufügen:

run:
  - replace:
      filename: /etc/nginx/conf.d/discourse.conf
      from: /server.+{/
      to: |
        server {
          set_real_ip_from 192.168.1.100; ## Durch deine tatsächliche Load-Balancer-IP/Subnetz ersetzen
          real_ip_header X-Forwarded-For;
          real_ip_recursive on;