Wie Geschwindigkeit pro User begrenzen?

yago

Member
Hallo,

ich betreibe eine Seite auf der Downloads angeboten werden, und habe das Problem, dass einige Nutzer mit sehr schnellen Internetanschlüssen >100mbit/s oder Servern die Anbindung von meinen Servern voll auslasten können.
Wie kann ich am besten die Geschwindigkeit pro IP Adresse begrenzen?
Ich habe es bereits mit der limit_rate option von nginx versucht, allerdings scheint diese nicht zu greifen, wenn Downloads über php bereitgestellt werden.
Der Nachteil dort ist auch, dieses Limit gilt dann für jede Verbindung einzeln.

Gibt es eine Möglichkeit die Gesamtbandbreite anderweitig zu begrenzen, mit iptables oder so?
 
Wird mit PHP, fopen, etc. und Headern zum ausliefern gearbeitet, wie z.B.:
PHP:
header("Content-Disposition: attachment; filename=\"${row['fileName']}.${row['fileExtension']}\"");
set_time_limit(0);
$fp=@fopen("/downloads/${row['fileID']}.${row['fileExtension']}","rb");
while(!feof($fp)) {
    print(@fread($fp,1024));
    ob_flush();
    flush();
}

Wenn ja, dann sollte man die Methode zum Ausliefern auf "X-Accel-Redirect" wechseln:
PHP:
header('Content-Length: '.(string)(filesize($fileWithPath)));
header('Cache-Control: public, must-revalidate');
header('Pragma: no-cache');
header("Content-Disposition: attachment; filename=\"${row['fileName']}.${row['fileExtension']}\"");
header('Content-Transfer-Encoding: binary');
header("X-Accel-Redirect: /downloads/${row['fileID']}.${row['fileExtension']}");
 
Generell würde ich zur Vereinfachung von zusätzlichen Features wie gleichzeitige Verbindungen, Resume-Support, ... eher Nginx SecureLink Modul statt X-Accel-Redirect empfehlen:
http://wiki.nginx.org/HttpSecureLinkModule

Vorteilhaft ist dass es ohne großen Mehraufwand die Verwendung mehrerer Content-Server erlaubt und inherent bereits Funktionen wie Ablaufzeit des Links enthalten sind.
 
Back
Top