Hallo, mein Discourse läuft über einen Reverse-Proxy (NPM).
Discourse unterstützt das x-forwarded-Feld nicht und zeigt daher ständig die IP-Adresse meines Reverse-Proxys an, wenn man beispielsweise prüft, von welcher IP sich ein Benutzer registriert usw.
Ich habe die Anfrage in Discourse abgefangen, und das X-forwarded-Header ist zwar vorhanden, aber in der access.log wird die IP des Reverse-Proxys angezeigt.
Laut Internet ist es notwendig, entweder die Konfigurationsvorlage oder die Nginx-Konfigurationsdatei für Discourse (nicht Nginx auf NPM) zu ändern.
Kannst du mir dabei helfen? Denn Discourse aktiviert die Vorlage web.ratelimit und sendet daher häufig Fehler 429.
Ich habe einen Debian-Server mit Apache 2.4 vHosts und einer dieser vHosts ist der Discourse Docker-Container. Auf Apache ist mod_remoteip aktiviert (es gab kein mod_extract_forwarded), aber ohne Konfigurationsoptionen. Die vHost-Konfiguration ist ziemlich einfach:
RequestHeader set X-Forwarded-Proto "https"
ProxyPreserveHost On
ProxyRequests Off
ProxyPass /.well-known !
ProxyPass / http://localhost:8083/
ProxyPassReverse / http://localhost:8083/
8083 ist der exponierte HTTP-Port des Discourse Docker-Containers.
Das ist im Grunde alles.
Ich sehe die verschiedenen Besucher (nach IP) in den Statistiken, die mit dem Apache access.log erstellt werden, und wichtiger noch, ich sehe auch verschiedene letzte IPs für die Benutzer (das war für mich eine einfache Überprüfung). Es scheint also, dass die IP-Adressen der Besucher über den Apache-Proxy an Discourse weitergegeben werden. Dies war bereits der Fall, ohne dass mod_remoteip aktiviert war, was ich erst vor einigen Tagen getan habe.
Wie auch immer, ich habe jetzt wieder Probleme. Ein Crawler oder ein DoS-Angriff läuft auf unserem Server mit einer IPv4 aus Krakau, Polen. Er erzeugt eine Menge 429-Fehler. Das ist für mich in Ordnung, aber alle anderen Besucher erhalten ebenfalls diese Fehler.
Ist das auch der Fall? Wenn also das Verbindungslimit erreicht ist, erhält jeder einen Fehler? Oder pro IP?
Fehlt etwas in meiner Konfiguration oder kann ich sie verbessern/optimieren? Wir hatten vor einigen Wochen und auch vor einigen Tagen Probleme mit dem Claudebot, daher muss das Limit vielleicht etwas angehoben werden.
Ich habe gerade app.yml bearbeitet und einen Rebuild des Containers durchgeführt. Der Bot kam fast sofort zurück, nachdem der Container wieder hochgefahren war. Ich sehe noch keine 429-Fehler. Hoffentlich bleibt das für „normale“ Benutzer auch so.
Das ist es ja… Wenn ich die Admin-Seite der Benutzer überprüfe, habe ich immer unterschiedliche „letzte IP“-Einträge gesehen. Discourse hat also irgendwie die echten IPs der Benutzer gesehen, auch ohne mod_remoteip und auch ohne die Nginx-Konfigurationsänderung.
Wie auch immer, ich bin gespannt, ob die Nginx-Konfigurationsänderung die Lösung für dieses Problem gebracht hat!