Erreurs de limite de débit bien que l'IP soit sur liste blanche

Nous utilisons Discourse dans un conteneur Docker. Nous avons mis en place des limites de débit avec une adresse IP autorisée. Cependant, nous recevons toujours des erreurs de limite de débit lors de requêtes provenant de cette IP. Je suis à peu près sûr que la configuration nginx est correcte, voici à quoi elle ressemble :

geo $limit {
    default 1;
    1.1.1.1 0; # pas la vraie 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 est configuré pour enregistrer une erreur si une limite de débit a été atteinte et nous voyons effectivement des messages de journalisation - mais aucun provenant de l’adresse IP autorisée. Pourtant, nous recevons des tonnes de 429 lors de requêtes provenant de l’adresse IP autorisée. Les URL des requêtes sont des profils d’utilisateurs (par exemple, /users/foo.json). Existe-t-il une sorte de limite de débit dans Discourse lui-même ?

2 « J'aime »

Salut, Nginx gère bien la limitation de débit comme vous l’avez indiqué, mais Discourse a également sa propre façon de gérer la limitation de débit au niveau de l’application. Sam a un article intéressant à ce sujet :

La seule chose que je me demande, c’est si nous pouvons effectivement limiter le débit avec des exceptions (c’est-à-dire mettre des adresses IP sur liste blanche via ces règles). Je cherche encore un moyen de le faire… :sweat_smile:

D’accord, je pense que je suis sur la bonne voie :

Peut-être que DISCOURSE_MAX_REQS_PER_IP_EXCEPTIONS est exactement ce dont nous avions besoin :grin:

1 « J'aime »

Moi aussi, j’atteins une limite de 60 appels à l’API par minute que je n’arrive pas à contourner. J’ai configuré tout cela :

      - 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=....

Je sais que ce n’est pas nginx car je reçois le message « Vous avez effectué cette action trop de fois », ce qui signifie que le limiteur de débit de Discourse s’en charge.

Avez-vous trouvé une solution ?

2 « J'aime »