Limiter la bande passante d'un serveur de download

Lorsque j'ai voulu offrir la possibilité de pouvoir télécharger les données de OpenstreetMap en CSV, je me suis dit que je devais préserver les ressources de mon serveur (car les webservices et le serveur de téléchargement allait être sur la même machine). Je me suis alors demandé comment limiter la bande passante pour un host en particulier. Il existe un module apache pour faire cela : mod_bandwith.

Il est disponible dans pas mal de distribution Linux, et s'installe facilement avec un apt ou un yum :

sudo apt-get install libapache2-mod-bw

Il faut ensuite l'activer :

sudo a2enmod bw

Et enfin le configurer.

A titre d'exemple, je vais configurer un serveur avec 5 téléchargements maximum, en allouant une bande passante de 8 Mbits maximum pour les fichiers zip sur notre serveur download.example.com et en personnalisant le message lorsque la limite est atteinte :

      <Virtualhost *>
...
      ServerName download.example.com
      BandWidthModule On
      BandWidth all 8000000
      AddOutputFilterByType MOD_BW  application/zip
      ErrorDocument 509 "too many users connected"
      BandWidthError 509
      MaxConnection all 5
...
   </Virtualhost>

  • BandWidthModule : Nécessaire pour activer la restriction
  • BandWidth all 8000000 : limite la bande passante totale pour tous les utilisateur à 8Mbits. On pourrait spécifier une limitation en fonction du domaine ou l'adresse IP de l'appelant :
 BandWidth download.from.host1.com 4000000
 BandWidth download.from.host2.com 4000000
 BandWidth 10.60.2.153 120000000
  • AddOutputFilterByType : Limite la restriction pour les fichiers ayant comme content-type 'application/zip'. Vous pouvez voir l'association content-type <=> extensions dans le fichier mime.conf.
  • BandWidthError : Définit le code d'erreur HTTP associé au dépassement de bande passante (403 par défaut)
  • ErrorDocument : Personnalise le message pour le code erreur HTTP 509
  • MaxConnection : seuls 5 téléchargement pourront être fait simultanément. il se partage les 8Mb. on peux limter les connections en fonctions des hosts :
   MaxConnection all 20
   MaxConnection 192.168.0.0/24 5

Enfin pour finir, il est possible de limiter la bande passante en fonction de la taille et de l'extension des fichiers :

 LargeFileLimit .avi 500 10240

Cela limite les fichiers avec l'extension avi ayant une taille >= 500kb à 10kbytes/s

Liens utiles : Documentation | Téléchargement

La discussion continue ailleurs

URL de rétrolien : https://davidmasclet.gisgraphy.com/index.php?trackback/16

Fil des commentaires de ce billet