From e546afbfe01d56e1e2541cc4fa9bb21617a8bb7d Mon Sep 17 00:00:00 2001 From: gilmry Date: Thu, 20 Aug 2026 08:04:28 +0200 Subject: [PATCH] =?UTF-8?q?fix(infra):=20retire=20la=20priorit=C3=A9=20exp?= =?UTF-8?q?licite=20qui=20d=C3=A9sactivait=20le=20rate-limit=20login?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Vérifié en prod après déploiement de la PR précédente : 15 requêtes rapides sur /auth/login, aucune n'a reçu de 429, le rate-limit ne se déclenchait jamais. Cause : priorité explicite = 10 sur le routeur elevia-backend-login, alors que le routeur générique elevia-backend (Host seul, sans priorité explicite) reçoit une priorité auto-calculée par Traefik basée sur la longueur de la règle - largement > 10 dans ce cas. Le routeur générique gagnait donc systématiquement et court-circuitait le middleware de rate-limit pour toutes les requêtes, y compris /auth/login. Fix : retirer la priorité explicite. La règle du routeur login (Host + Path) est déjà plus longue/spécifique que celle du routeur générique (Host seul), donc elle gagne naturellement sur le calcul automatique de Traefik - pas besoin de la forcer à la main. --- docker-compose.yml | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/docker-compose.yml b/docker-compose.yml index a7bd8e4..071c98e 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -116,7 +116,13 @@ services: - "traefik.http.routers.elevia-backend-login.entrypoints=websecure" - "traefik.http.routers.elevia-backend-login.tls.certresolver=letsencrypt" - "traefik.http.routers.elevia-backend-login.service=elevia-backend" - - "traefik.http.routers.elevia-backend-login.priority=10" + # No explicit priority: Traefik ranks routers by matcher length when + # priority isn't set, and this rule is already longer/more specific + # than the catch-all elevia-backend router, so it wins on its own. + # An earlier explicit "priority=10" here was *lower* than the + # catch-all's auto-computed priority, so the catch-all matched first + # and silently bypassed the rate limit for every request - verified + # live in prod (15 rapid /auth/login calls, zero 429s). - "traefik.http.routers.elevia-backend-login.middlewares=elevia-login-ratelimit" - "traefik.http.middlewares.elevia-login-ratelimit.ratelimit.average=5" - "traefik.http.middlewares.elevia-login-ratelimit.ratelimit.period=1m"