Ein rechenstarker Webserver hilft wenig, wenn sich zu viele Benutzer um die Bandbreite seiner Netzanbindung balgen. Sysadmin-Kolumnist Charly hat sich entschieden: Große Sauger kriegen an seiner Tränke künftig die schlechteren Plätze.
Ich habe einen Webserver, der mit 100 MBit/s angebunden ist und auf dem Dutzende virtuelle Hosts laufen. Einer davon bietet ISO-Images von Linux-Distributionen zum Download an, die teils mehrere GByte groß sind. Wenn genug Leute zeitgleich daran saugen, gibt es eine Rohrverstopfung – die Downloads drängen den restlichen HTTP-Verkehr an die Wand, die Apache-Antwortzeiten gehen in die Knie und die User werden unleidig.
Meine Rettung hört auf den Namen Libapache2-mod-bw [1] oder ähnlich, je nach Distribution. Das “bw” steht für Bandwidth, und genau deren Verbrauch kann ich damit steuern. Abbildung 1 zeigt als Beispiel einen Ausschnitt aus einer Apache-Konfiguration, das demonstriert, was mit dem Modul alles machbar ist.
Es kann kaum überraschen, dass »BandwidthModule On« die Bandbreitenregulierung für diesen virtuellen Host einschaltet. Dagegen sieht »ForceBandwidthModule On« ein wenig doppelt gemoppelt aus. Die Zeile ist trotzdem notwendig, denn nur sie zwingt alle Verbindungen durch Mod_bw und nicht nur ausgewählte Mime-Types.
Die beiden »Bandwidth« -Zeilen geben die maximale Geschwindigkeit an, in der Apache seine Daten an die definierten Clients sendet. Hier muss ich die Reihenfolge beachten, denn es gilt “first Match”: Die erste auf einen Client zutreffende Bandwidth-Regel gewinnt, ich muss also spezielle Regeln vor allgemeineren definieren.
Schreibt der Admin als maximale Geschwindigkeit eine Null in die Konfiguration wie in der ersten Bandwidth-Zeile, gibt es keine Begrenzung – das Netz 10.50.0.0/16 hat also freie Bahn. Für alle anderen Clients gilt das in der nächsten Zeile festgelegte Limit von 20 MBit/s. Achtung, hier liegt ein Stolperstein im Weg: Die Geschwindigkeit muss man in Bytes pro Sekunde einstellen, deshalb der Wert 2 621 440.
Die Großen trifft’s hart
»LargeFileLimit« gibt mir die Möglichkeit, die Geschwindigkeit beim Download großer Dateien zu drosseln, während der Host kleine mit der normalen ausliefert. Drei Parameter muss ich angeben: Zuerst kommt der Dateityp, im Beispiel ».iso« , Mod_bw würde hier auch ein Asterisk als Platzhalter akzeptieren. Danach kommt die Dateigröße in Byte, oberhalb der die Regel greift – die Angabe 2 097 152 entspricht 2 MByte. Zuletzt lege ich die Geschwindigkeit für die Schwergewichte fest. Ich entscheide mich für 5 MBit/s, in Bytes pro Sekunde bedeutet das 655 360.
Auch die Zahl gleichzeitiger Verbindungen darf ich begrenzen. Die Null in der ersten »MaxConnection« -Zeile setzt dem Netz 10.50.0.0/16 keine Limits, für alle anderen gelten 32 Parallelverbindungen als Obergrenze. Ist sie ausgeschöpft, antwortet der Apache normalerweise mit dem Fehlercode 503 (Service unavailable), was mir reichlich unspezifisch erscheint. Mod_bw bietet aber die Möglichkeit, einen anderen Code festzulegen, ich nehme 510 und lasse eine selbst gestaltete Fehlerseite zurückgeben. (jk)
Infos







