Limiter la bande passante d'un serveur de download
Par MD3804-GANDI le jeudi 12 novembre 2009, 14:48 - Apache - Lien permanent
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