Rate limit errors, obwohl die IP gewhitelistet ist

Wir verwenden Discourse in einem Docker-Container. Wir haben Ratenbegrenzungen mit einer Whitelist-IP eingerichtet. Dennoch erhalten wir Ratenbegrenzungsfehler, wenn wir Anfragen von dieser IP-Adresse stellen. Ich bin ziemlich sicher, dass die Nginx-Konfiguration korrekt ist, hier ist, wie sie aussieht:

geo $limit {
    default 1;
    1.1.1.1 0; # nicht die echte IP
}

map $limit $limit_key {
    0 "";
    1 $binary_remote_addr;
}

limit_req_zone $limit_key zone=flood:10m rate=12r/s;
limit_req_zone $limit_key zone=bot:10m rate=200r/m;
limit_req_status 429;
limit_conn_zone $limit_key zone=connperip:10m;
limit_conn_status 429;

...
  location @discourse {
    limit_conn connperip 20;
    limit_req zone=flood burst=12 nodelay;
    limit_req zone=bot burst=100 nodelay;
   ...
  }

Nginx ist so konfiguriert, dass es im Falle einer erreichten Ratenbegrenzung einen Fehler protokolliert, und wir sehen tatsächlich einige Protokollmeldungen – aber keine von der Whitelist-IP. Dennoch erhalten wir eine Menge 429er, wenn wir Anfragen von der Whitelist-IP stellen. Die angeforderten URLs sind Benutzerprofile (z. B. /users/foo.json). Gibt es eine Art von Ratenbegrenzung in Discourse selbst?

2 „Gefällt mir“

Hallo, Nginx verwaltet die Ratenbegrenzung zwar, wie Sie sagten, aber Discourse hat auch seine eigene Methode zur Verwaltung der Ratenbegrenzung auf Anwendungsebene. Sam hat einen interessanten Artikel dazu:

Das Einzige, worüber ich mich wundere, ist, ob wir tatsächlich eine Ratenbegrenzung mit Ausnahmen einrichten können (d. h. IPs über diese Regeln auf die Whitelist setzen). Ich suche immer noch nach einer Möglichkeit, dies zu tun… :sweat_smile:

Okay, ich glaube, ich bin etwas auf der Spur:

Vielleicht ist DISCOURSE_MAX_REQS_PER_IP_EXCEPTIONS genau das, was wir brauchten :grin:

1 „Gefällt mir“

Ich stoße ebenfalls auf ein Ratenlimit von 60 Aufrufen pro Minute an die API, das ich anscheinend nicht umgehen kann. Ich habe all diese hier festgelegt:

      - DISCOURSE_MAX_REQS_PER_IP_MODE=none
      - DISCOURSE_MAX_USER_API_REQS_PER_MINUTE=20000
      - DISCOURSE_MAX_USER_API_REQS_PER_DAY=30000
      - DISCOURSE_MAX_ADMIN_API_REQS_PER_MINUTE=20000
      - DISCOURSE_MAX_REQS_PER_IP_PER_MINUTE=20000
      - DISCOURSE_MAX_REQS_PER_IP_PER_10_SECONDS=2000
      - DISCOURSE_MAX_ASSET_REQS_PER_IP_PER_10_SECONDS=2000
      - DISCOURSE_SKIP_PER_IP_RATE_LIMIT_TRUST_LEVEL=0
      - DISCOURSE_MAX_ADMIN_API_REQS_PER_KEY_PER_MINUTE=20000
      - DISCOURSE_MESSAGE_BUS_MAX_BACKLOG_SIZE=1000
      - DISCOURSE_MAX_REQS_PER_IP_EXCEPTIONS=....

Ich weiß, dass es nicht nginx ist, weil ich die Meldung „Sie haben diese Aktion zu oft ausgeführt“ erhalte, was bedeutet, dass der Discourse RateLimiter dafür zuständig ist.

Hast du eine Lösung gefunden?

2 „Gefällt mir“