Heute habe ich mich mit der Bandbreitenbegrenzung für einzelne Vhosts eines Webservers beschäftigt. Da ich Apache 2.2 einsetze, musste das Modul damit kompatibel sein. www-apache/mod_cband-0.9.7.5 und www-apache/mod_bw-0.7 waren das leider nicht. Es gab jedoch einen Patch für mod_bw, der das Problem beheben sollte. Ein genauerer Blick auf gentoo-portage.com zeigte mir, dass es bereits eine stable Version 0.8 gibt, welche Apache 2.2 kompatibel ist.
Über emerge -av mod_bw
sollte nun die Version 0.8 installieren. Sobald diese installiert ist, muss man in /etc/conf.d/apache2
den mod_bw noch aktivieren. Dazu wird zu den APACHE2_OPTS
einfach " -BW
" hinzugefügt. Der mod_bw ist jetzt soweit installiert.
Es gibt verschiedene Konfigurationsoptionen für den mod_bw.
Unterschied zwischen einer “globalen” und einer Vhost-spezifischen Konfiguration:
Die “globale” Konfiguration gilt für alle Vhosts des Apachen. Diese wird in /etc/apache2/modules.d/11_mod_bw.conf
gemacht. Darin stehen nach der Installation schon einige Vorschläge zur Konfiguration, allerdings sind diese noch stark ausbaufähig.
Die Vhost-spezifische Konfiguration gilt nur für einen Vhost und kann diesen speziell begrenzen.
Die Direktiven in der Übersicht:
- Bandwidth
- BandWidthError
- BandwidthModule
- BandWidthPacket
- ForceBandWidthModule
- LargeFileLimit
- MaxConnection
- MinBandwidth
BandWidth
|
|
“Quelle” kann verschieden angegeben werden:
- Voller Hostname
- Teil einer Domain
- IP-Adresse
- Adressbereich (z.B.: 192.168.0.0/24 oder 192.168.0.0/255.255.255.0)
Kommt diese Direktive mehrmals mit verschiedenen Quellen vor, so ist die Reihenfolge entscheidend. Die Reihenfolge ist die Priorität, wobei der erste Eintrag die höchste hat. Beispiel:
|
|
Das Netz 192.168.0.0-192.168.0.255 kann maximal mit 10kb/s Daten vom Webserver empfangen
BandWidthError
|
|
Wenn die Maximale Anzahl der Verbindungen (definiert durch MaxConnection
) erreicht wird, so wird der HTTP-Error-Code 503 (HTTP_SERVICE_UNAVAILABLE) ausgegeben. Da die meistens Nutzer nicht wissen, aus welchem Grund dies geschieht, kann das nervig sein. Daher kann man hier den Fehlercode festlegen, der dann ausgegeben wird.
Beispiel:
|
|
Als ErrorCode wird 510 verwendet und dieser mit einer Fehlerseite versehen
BandwidthModule
|
|
Diese Direktive schaltet das Bandwidth-Modul an (On) oder aus (Off) Beispiel:
|
|
Einschalten des Modules
BandWidthPacket
|
|
Größe der Packete. Besser nicht ändern. Defaultwert: 8092, Werte zwischen 1024 und 131072 sind erlaubt. Zu kleine Werte machen mod_bw langsam (aufgrund des vielen Splittens). Beispiel:
|
|
Setzt 8092 als Packetgröße
ForceBandWidthModule
|
|
In der Default-Konfiguration wird nicht jeder Request durch mod_bw geleitet. Dadurch kann die Bandbreitenregulation möglicherweise nicht korrekt durchgeführt werden. Diese Direktive piped jeden Request durch mod_bw. Beispiel:
|
|
Damit wird jeder Request durch mod_bw geleitet
LargeFileLimit
|
|
Mit dieser Direktive kann die Dateiendung, sowie eine minimale Größe, aber der die Direktive greifen soll, angegeben werden. Beispiel:
|
|
MaxConnection
|
|
Mit dieser Direktive wird die maximale (Max) Anzahl von Verbindungen aus einer bestimmten Quelle angegeben. Werden mehr Verbindungen aufgebaut, bekommen diese einen HTTP-Status-Code 503 (Service Temporarily Unavailable) oder die in BandWidthError angelegte Fehlerdatei. Beispiel:
|
|
Alle Clients aus dem Netz 192.168.0.0/24 erhalten 20b/s, alle anderen 50b/s
MinBandwidth
|
|
Mit dieser Direktive wird die minimale Geschwindigkeit pro Quell-Host/Range festgelegt. Jeder Client bekommt die festgelegte Rate zugewiesen, egal, wieviel Gesamt-Bandwidth festgelegt wurde. Wenn [bytes/s] auf 0 gestellt, wird der Default-Wert von 256 bytes/s festgelegt. Wird [bytes/s] auf -1 festgelegt, so bekommt jeder Client die Maximal-Bandbreite zugewiesen. Beispiel:
|
|
Die Bandbreite wird auf 100kb/s festgelegt. Ist nur ein Client verbunden, so bekommt dieser 100kb/s. Verbindet sich ein zweiter, so wird diesem und dem ersten (wie auch allen weiteren) mindestens 50kB/s zugewiesen.
|
|
Jeder Client bekommt eine maximale Bandbreite von 50kb/s zugewiesen
Beispiele befinden sich in der Readme von mod_bw , hier ein Auszug:
|
|
Erklärung: Limitiert alle Clients auf maximal 10kb/s