mcdanlj
(Michael K Johnson)
16. Juli 2026 um 13:02
1
In den letzten beiden Monaten (ich bin mir nicht sicher, wann dies genau begann) habe ich festgestellt, dass meine externe Nginx-Konfiguration, wie in Add an offline page to display when Discourse is rebuilding or starting up dokumentiert, um die echte IP-Adresse durchzureichen, ignoriert wird.
Diese externe Nginx-Konfiguration funktionierte jahrelang:
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto https;
proxy_set_header X-Real-IP $remote_addr;
Jetzt sehe ich, dass der gesamte Verkehr dem internen Docker-Netzwerk im RFC1918-Bereich zugeordnet wird, wie hier:
Dies bricht offensichtlich die Funktion „wende diese Strafe auf andere Benutzer an, die diese IP-Adresse teilen“ sowie alle anderen Verwendungen der echten Remote-IP-Adresse.
Ich vermute, dass dies irgendwo bereits angesprochen wurde und ich nur schlecht suche. Aber ich würde mich über Hinweise darauf freuen, was sich geändert haben könnte, an das ich mich anpassen muss.
pfaffman
(Jay Pfaffman)
16. Juli 2026 um 13:27
2
Ich erinnere mich, dass ich kürzlich etwas darüber gelesen habe, finde es aber auch nicht mehr. Handling the "chain of trust" of the end user's real IP - #8 by supermathie enthält einen Link zur Cloudflare-Vorlage, die meiner Meinung nach ein gutes Modell sein könnte.
run:
- file:
path: /etc/nginx/conf.d/outlets/server/real-ip-header.conf
chmod: 644
contents: |
real_ip_header cf-connecting-ip;
- exec:
cmd:
# avoid the trap of specifying both URLs on one curl line; the data might not have a final newline
# print sprintf looks dubious at first, but avoids the problem of "how many times do you backslash a \\\\n"
- curl -s https://www.cloudflare.com/ips-v4/ | awk '{print sprintf("set_real_ip_from %s;", $0)}' > /etc/nginx/conf.d/outlets/server/set-real-ip-from-cloudflare.conf
- curl -s https://www.cloudflare.com/ips-v6/ | awk '{print sprintf("set_real_ip_from %s;", $0)}' >> /etc/nginx/conf.d/outlets/server/set-real-ip-from-cloudflare.conf
So mache ich es, und es scheint immer noch zu funktionieren (Stand: „Discourse 2026.6.0-latest - GitHub - discourse/discourse: A platform for community discussion. Free, open, simple. · GitHub version 5c507d8359f4d6e8a5d98780c622d51cedbd9bd7“)
after_bundle_exec:
- replace:
filename: /etc/nginx/conf.d/discourse.conf
from: "types {"
to: |
set_real_ip_from 192.168.1.0/24;
set_real_ip_from 192.168.11.0/24;
set_real_ip_from 172.16.0.0/12;
set_real_ip_from 10.0.0.0/8;
real_ip_recursive on;
real_ip_header X-Forwarded-For;
types {
chapoi
16. Juli 2026 um 14:39
3
Wahrscheinlich hängt es mit diesem Commit zusammen: FIX: nginx sample configuration should be setting x-f-f to the end us… · discourse/discourse@b4a3389 · GitHub
Das könnte dir helfen:
Hintergrund
Discourse muss den echten IP-Adresse des Endbenutzers kennen.
Allerdings verbindet sich ein Endbenutzer nie direkt mit Discourse, da es immer einen oder mehrere vorgelagerte Webserver (nginx, die in dem Discourse-Container laufen) gibt. Daher benötigen wir eine Möglichkeit, diese Information auf vertrauenswürdige Weise an Discourse weiterzuleiten.
Der x-forwarded-for-Header ist die Lösung. In diesem Thema werde ich die spezifischen Mechanismen zur ordnungsgemäßen Handhabung dieser …
mcdanlj
(Michael K Johnson)
16. Juli 2026 um 15:16
4
Wie üblich hilft es mir, den Beitrag zu veröffentlichen und die Antworten zu sehen, um andere ähnliche Beiträge zu finden. z. B.
Hi,
I have researched quite a lot but nothing seems to work with me.
I have a discourse setup installed. And I have this remote reverse proxy server that acts as a HTTPS layer between the user and the main discourse server..
[image]
I have included these revers proxy settings properly.. But why does it still show my Reverse Proxy server’s IP Address (hostname to be specific)
[image]
Danke an alle! Ab zum Konfigurieren von set_real_ip_from im Container-Nginx!
Ich werde jedoch den gesamten RFC1918-Adressraum verwenden. Für alle anderen als Referenz wäre das:
after_bundle_exec:
- replace:
filename: /etc/nginx/conf.d/discourse.conf
from: "types {"
to: |
set_real_ip_from 192.168.0.0/16;
set_real_ip_from 172.16.0.0/12;
set_real_ip_from 10.0.0.0/8;
real_ip_recursive on;
real_ip_header X-Forwarded-For;
types {
mcdanlj
(Michael K Johnson)
16. Juli 2026 um 17:07
5
Bei mir funktioniert das nicht.
Ich verstehe jetzt, warum es bei mir mit dem referenzierten Commit aufgehört hat zu funktionieren; es hat den set_real_ip-Ersatz kaputt gemacht, den ich seit Jahren im Einsatz hatte. Die Begründung, ihn robuster zu machen, ist vernünftig, und das ist der bessere Weg; eine unterbrechende Änderung und dann sollte es in Zukunft weniger häufig kaputtgehen.
Ich weiß nicht, warum der after_bundle_exec-Ersatz nicht angewendet wird, aber ich werde zum Einfügen von Dateien wechseln.
Das funktioniert bei mir; teile es mit der nächsten Person:
run:
- file:
path: /etc/nginx/conf.d/outlets/server/real-ip-recursive.conf
chmod: 644
contents: |
real_ip_recursive on;
- 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.conf
chmod: 644
contents: |
set_real_ip_from 192.168.0.0/16;
set_real_ip_from 172.16.0.0/12;
set_real_ip_from 10.0.0.0/8;