La limitation du débit avec Nginx est une fonctionnalité intégrée qui contrôle le nombre de requêtes HTTP qu’un client peut envoyer pendant une période donnée. Elle permet de réduire le trafic abusif ciblant les API, les pages de connexion et les applications gourmandes en ressources, sans nécessiter de logiciel supplémentaire.
Dans ce guide, vous allez configurer les limites de requêtes de Nginx, les tester sans risque et activer la protection sur un serveur Ubuntu.
Comment fonctionne la limitation du débit avec Nginx ?
Nginx utilise le module limit_req pour suivre les requêtes entrantes, généralement selon l’adresse IP du client.
Par exemple, vous pouvez définir une limite moyenne de cinq requêtes par seconde tout en autorisant de brefs pics de trafic. Les requêtes dépassant le pic autorisé peuvent alors être rejetées.
Cela évite que des requêtes excessives ne surchargent votre application.
Remarque : La limitation du débit contribue à atténuer certaines attaques par inondation HTTP de couche 7. Elle ne peut pas arrêter les attaques DDoS de grande ampleur au niveau du réseau qui saturent votre connexion.

Prérequis
Vous aurez besoin d’un serveur Ubuntu sur lequel Nginx est installé, d’un accès SSH avec les privilèges sudo et d’un site web ou d’une application déjà en place.
Si vous installez Nginx pour la première fois, suivez notre tutoriel sur le proxy inverse Nginx.
Avant toute modification, sauvegardez la configuration actuelle de votre site web.
Étape 1 : définir une zone de limitation du débit
Connectez-vous à votre serveur en SSH.
Sur une installation standard de Nginx sous Ubuntu, créez un nouveau fichier de configuration :
sudo nano /etc/nginx/conf.d/rate-limit.conf
Ajoutez :
limit_req_zone $binary_remote_addr zone=perip:10m rate=5r/s;
Cette configuration utilise l’adresse IP du client pour suivre les requêtes, alloue 10 Mo aux données de suivi et définit une limite moyenne de cinq requêtes par seconde et par adresse IP.
La directive limit_req_zone doit être placée dans le contexte http de Nginx. La configuration standard sous Ubuntu y inclut les fichiers de conf.d.
Enregistrez le fichier.
Étape 2 : activer la limitation du débit pour votre site web
Ouvrez le fichier de configuration Nginx de votre site web :
sudo nano /etc/nginx/sites-available/app.example.com
Remplacez le nom du fichier par celui de votre fichier de configuration.
Pour une application HTTP fonctionnant sur le port 3000, un point de terminaison d’API protégé pourrait ressembler à ceci :
location /api/ {
limit_req zone=perip burst=10 nodelay;
limit_req_status 429;
limit_req_dry_run on;
proxy_pass http://127.0.0.1:3000;
}
Voici le rôle des principales directives :
limit_req: applique la limite définie précédemment.burst=10: autorise un bref pic de requêtes supplémentaires.nodelay: traite immédiatement les requêtes autorisées pendant un pic.limit_req_status 429: renvoie le code HTTP 429 lorsque des requêtes sont rejetées.limit_req_dry_run on: consigne les requêtes excessives sans les bloquer.
Important : Ajoutez ces directives de limitation du débit au bloc location existant qui correspond aux requêtes concernées. Ne créez pas de blocs location en double et ne remplacez pas votre configuration existante du serveur dorsal.
Les valeurs indiquées sont des exemples. Choisissez des limites adaptées aux schémas habituels de requêtes de votre application.
Étape 3 : valider votre configuration Nginx
Vérifiez la configuration :
sudo nginx -t
Si le test réussit, rechargez Nginx :
sudo systemctl reload nginx
Si une erreur apparaît, corrigez-la avant de recharger Nginx.
Étape 4 : tester la limite de requêtes
Le mode simulation étant activé, les requêtes ne seront pas encore rejetées.
Surveillez le journal d’erreurs de Nginx :
sudo tail -f /var/log/nginx/error.log
Depuis un autre terminal, envoyez un petit pic de requêtes de test vers un point de terminaison que vous contrôlez :
for i in $(seq 1 15); do
curl -s -o /dev/null -w "%{http_code}\n" \
https://app.example.com/api/health
done
Remplacez l’URL par celle d’un point de terminaison fonctionnel de votre propre application de test ou de préproduction.
Si les requêtes dépassent la limite, Nginx devrait consigner des messages contenant limiting requests, dry run dans son journal d’erreurs.
Votre application devrait continuer à renvoyer ses réponses habituelles, puisque le rejet des requêtes n’est pas activé.
Étape 5 : activer la limitation du débit
Après avoir examiné les résultats et confirmé que vos limites sont adaptées, supprimez cette directive du bloc location protégé :
limit_req_dry_run on;
Validez la configuration et rechargez de nouveau Nginx :
sudo nginx -t
sudo systemctl reload nginx
Les requêtes excessives peuvent désormais recevoir la réponse HTTP 429 Too Many Requests.
Répétez un test contrôlé et vérifiez les codes de réponse. Les résultats exacts dépendent du rythme des requêtes et des limites configurées.
Comment annuler les modifications
Si des utilisateurs légitimes sont affectés, rétablissez :
limit_req_dry_run on;
Validez la configuration et rechargez Nginx. La configuration repasse ainsi en mode surveillance, sans rejeter les requêtes.
Vous pourrez ensuite ajuster les limites en fonction du trafic réel.
Important : Nginx derrière Cloudflare ou un autre CDN
Lorsque Nginx se trouve derrière un proxy inverse, l’adresse IP du client visible par Nginx peut être celle du proxy plutôt que celle du visiteur d’origine.
Si vous appliquez des limites par adresse IP sans corriger ce problème, des utilisateurs sans lien entre eux risquent d’être regroupés.
Avant d’appliquer des limites par client, configurez la prise en charge des adresses IP clientes de confiance à l’aide du module Real IP de Nginx et des plages d’adresses IP documentées par votre fournisseur de proxy.
Ne faites jamais confiance aux en-têtes d’adresse IP fournis arbitrairement par les visiteurs.
La limitation du débit avec Nginx remplace-t-elle la protection contre les attaques DDoS ?
Non. Nginx peut limiter les requêtes HTTP excessives qui atteignent votre application, mais il ne peut pas filtrer le trafic qui a déjà saturé la connexion réseau en amont de votre serveur.
Pour une protection plus étendue, associez les contrôles au niveau de l’application aux mesures d’atténuation proposées au niveau de l’hébergement.
Notre guide sur la protection contre les attaques DDoS explique comment les défenses au niveau du réseau et de l’application se complètent.
Questions fréquentes
Oui. Nginx Open Source inclut le module limit_req.
Oui. Des paramètres trop stricts peuvent entraîner le rejet de requêtes légitimes, surtout lorsque plusieurs utilisateurs partagent une même adresse IP. Effectuez des tests en mode simulation avant d’activer le rejet des requêtes.
Oui. Elle est particulièrement utile pour limiter les requêtes excessives vers les points de terminaison d’API et d’autres routes d’application gourmandes en ressources.
Conclusion
Nginx intègre une fonctionnalité de limitation du débit qui peut contribuer à réduire le trafic HTTP abusif sans nécessiter de logiciel supplémentaire.
Configurez la limite de requêtes, testez-la en mode simulation et n’activez le rejet des requêtes qu’après avoir examiné les résultats.
Pour une protection complète du serveur, associez la limitation du débit à des mesures appropriées d’atténuation des attaques DDoS en amont.
Comment configurer un proxy inverse Nginx sur Ubuntu
Un proxy inverse Nginx reçoit les requêtes des visiteurs d’un site web et les transmet