limiter la vitesse de telechargement

limiter la vitesse de telechargement - Codes et scripts - Linux et OS Alternatifs

Marsh Posté le 19-07-2011 à 17:31:51    

bonjour,

 

j'ai un petit site qui permet de télécharger des fichiers >200Mo.
je souhaite pouvoir contrôler la vitesse de téléchargement de ces fichiers, en fonction du visiteur.

 

je connais les mods Apache tels que mod_cban ou mod_bandwith mais ils ne répondent pas tout à fait à mon besoin semble-t-il. En effet je souhaite limiter la vitesse de téléchargement "à la volée" en fonction de tel ou tel utilisateur, c'est-à-dire très précisément pour tel ou tel visiteur en particulier à un moment donné (dont je ne connais pas l'ip tant qu'il n'arrive pas sur le site), et non pas faire des règles qui ratissent large dans des fichiers vhost, http.conf etc...

  

ce que je ne veux pas faire:

Code :
  1. <VirtualHost *:80>
  2.     DocumentRoot /var/www/monsite.fr/
  3.     ServerName monsite.fr
  4.     blablabla
  5.     CBandSpeed 1024 10 30
  6.     CBandRemoteSpeed 10kb/s 3 2
  7.     blababla
  8. </VirtualHost>
  

ce que je veux faire:

Code :
  1. <?php
  2. if(is_allowed($visitor)){
  3.   header("Location: super_cool_fichier.zip" );
  4.   header("blabla" );
  5.   system("super_cool_mod --ip ".$_SERVER['REMOTE_ADDR']." -s -u -p -e -r --vitesse 10M --limit 0 --blabla" );
  6.   exit;
  7. }
  8. ?>


merci


Message édité par pimsa le 19-07-2011 à 17:35:38
Reply

Marsh Posté le 19-07-2011 à 17:31:51   

Reply

Marsh Posté le 19-07-2011 à 17:58:55    

En PHP c'est faisable, à coupler avec une authentification pour faire propre et avoir plusieurs parties voir une limite par utilisateur/jour.


---------------
Grippe ? Coronavirus ? Portez votre masque correctement ! :D
Reply

Marsh Posté le 19-07-2011 à 19:08:59    

Merci.
Je connais, c'est pour ça que j'ai précisé ">200Mo", cette méthode va bien pour des fichiers de 5Mo, pas pour des fichiers qui approche le gigaoctet... ça pose le problème du max_execution_time et avec un code comme ça le serveur pète les plombs (load average).

Reply

Marsh Posté le 19-07-2011 à 20:09:39    

Réponse rapide : tu peux pas.
Réponse longue, avec PF ou haproxy (au choix) tu dois pouvoir mais bonjour la prise de tête.


Message édité par black_lord le 19-07-2011 à 20:09:56

---------------
uptime is for lousy system administrators what Viagra is for impotent people - mes unixeries - github me
Reply

Marsh Posté le 19-07-2011 à 20:45:06    

je peux.
avec iptables par exemple.

Reply

Marsh Posté le 19-07-2011 à 20:50:01    

go ahead, make my day.
 

Spoiler :

[:cherrytree1]


 
mais honnêtement, le coupler avec un apache pour choisir le visiteur et tout, ça va être la prise de tête...


Message édité par black_lord le 19-07-2011 à 20:50:31

---------------
uptime is for lousy system administrators what Viagra is for impotent people - mes unixeries - github me
Reply

Marsh Posté le 19-07-2011 à 21:42:08    

un truc comme  
 

Code :
  1. <?php
  2.  
  3. system("iptables -I OUTPUT -p tcp --sport 80 -d ".$_SERVER['REMOTE_ADDR']." -m connrate --connrate 10000:100000 -j ACCEPT" );
  4.  
  5. ?>


 
devrait marcher si j'en crois le manuel.

Reply

Marsh Posté le 19-07-2011 à 21:46:02    

[:vomi] [:vomi] [:vomi]  
[:vomi] [:vomi] [:vomi]  
[:vomi] [:vomi] [:vomi]  
 
faire tourner apache en root [:bien] fais donc péter l'adresse du serveur [:dawa]


---------------
uptime is for lousy system administrators what Viagra is for impotent people - mes unixeries - github me
Reply

Marsh Posté le 19-07-2011 à 21:52:07    

:D  
 
justement il tourne pas en root donc ça marchera pas  :o  
 
mais en ajoutant un sudo et mon pass root en clair dans le code php ça marchera :miam:

Reply

Marsh Posté le 19-07-2011 à 23:54:54    

pimsa a écrit :

mais en ajoutant un sudo et mon pass root en clair dans le code php ça marchera :miam:


 [:implosion du tibia]  
 

Spoiler :

ça sent le futur topic "comment lancer une commande système en PHP sans accès root" :whistle:


---------------
Grippe ? Coronavirus ? Portez votre masque correctement ! :D
Reply

Marsh Posté le 19-07-2011 à 23:54:54   

Reply

Marsh Posté le 20-07-2011 à 00:15:05    

[:s@ms:3]

Reply

Marsh Posté le 20-07-2011 à 00:46:52    

Et avec un appel genre policy-kit ?


---------------
Un blog qu'il est bien
Reply

Marsh Posté le 20-07-2011 à 06:44:47    

pimsa a écrit :

:D

 

justement il tourne pas en root donc ça marchera pas :o

 

mais en ajoutant un sudo et mon pass root en clair dans le code php ça marchera :miam:

 

Si vraiment tu veux faire ce genre de porcasseries,  passe au moins par un systeme asynchrone... ton apache pousse dans une message queue les infos concernant l'ip a shapper et tu fais un daemon qui consomme cette queue. Ce daemon tourne en root et fera justement les appels a iptables. Par contre quand tu seras fait rooter ton serveur tu ne pourras pas dire qu'on ne t'avais pas prévenu :o

 

Pfiou, heureusement que c'est pas mon metier ce genre de choses :o


---------------
uptime is for lousy system administrators what Viagra is for impotent people - mes unixeries - github me
Reply

Marsh Posté le 20-07-2011 à 13:48:25    

En s'inspirant de ça pour la partie exécution avec droit root.

Reply

Marsh Posté le 20-07-2011 à 14:11:46    

Citation :

La méthode ultime : exécuter le serveur web en tant que root
 
Non, je déconne.


 [:dracula]  
 
Le coup d'un wrapper, bien vu... mais donc on revient au bon vieux CGI des familles [:hahaguy]


---------------
Grippe ? Coronavirus ? Portez votre masque correctement ! :D
Reply

Marsh Posté le 20-07-2011 à 19:51:52    

les wrappers c'est sale. php + un beanstalk + un daemon et on en parle plus...


---------------
uptime is for lousy system administrators what Viagra is for impotent people - mes unixeries - github me
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed