nginx et limitation de connexion par IP avec limit_conn_zone


Limiter une IP à une ou plusieurs connexion avec nginx peut s’averer utile si vous voulez proposer par exemple un seul téléchargement de fichier à la fois par IP sur votre serveur (économie de bande passante, éviter de se faire aspirer tout le site d’un coup, etc.)

Nginx rappelons le est actuellement l’un des serveurs web les plus performant, gratuit qui plus est.

L’exemple ci-dessous va limiter une IP à 5 connexions sur l’ensemble des images servies par votre serveur. On peut bien sur modifier la regex Location pour limiter aux videos, pdf, etc…


dans le fichier de config de nginx:


Dans http:

http {
limit_conn_zone $binary_remote_addr zone=limit:10m; 
}

10m veut dire qu’il va logguer les IPs connectées dans 10 MB de mémoire après il efface et recommence, ça permet de stocker les IPs connectées récement.


Dans server:

server {
    location ~ \.(jpg|jpeg|gif|png)$ {
      limit_conn limit 5; # limit to 5 cnx by IP
    } 
}

PS: limit est le nom de zone que vous donnez à votre règle, ça peut prendre la forme que ça veut comme dirait Egon dans Ghostbusters…

Pour en savoir plus : Doc nginx HttpLimitZoneModule

2 thoughts on “nginx et limitation de connexion par IP avec limit_conn_zone

  • roro

    Salut,
    Alors ça…Si ça ne se limite pas aux gros fichiers ( images)
    permettez moi de vous dire: QUE C’EST UNE GROSSE CONNERIE.
    On se fait déjà assez chier à trier les liens pourris que r’ammene l’aspirateur. Mais si il faut seringuer un millier d’ html un par un (forums), moi, je ressort les cannes à peche.

  • Max Post author

    T’affole pas, c’est dans l’optique de limiter l’accès aux gros fichiers justement. Pour pas se faire détruire la bande passante.

    C’est pour des cas de figure comme des grosses images justement, des videos, etc… C’est destiné aux webmasters soucieux de pas voir leur bande passante pompée honteusement par un outil de scrapping :p

    C’est pas le genre de script que l’on met sur le contenue dynamique comme des pages webs et autres mais ça vise essentiellement le contenu statique de grosse taille.

    PS: Pour “seringuer” les pages html tu utilise en général un proxy donc pas de problème d’IP ;)

Comments are closed.

Des questions Python sans rapport avec l'article ? Posez-les sur IndexError.