Login
Newsletter
Mi, 13. Februar 2019, 15:00

mod_ratelimit in Apache verwenden

Der Webserver Apache bietet eine einfache Möglichkeit, die Bandbreite von Verbindungen zu begrenzen. Das Modul mod_ratelimit und zwei Zeilen Konfiguration genügen.

Wer einen eigenen Server zuhause hinter der DSL-Leitung betreibt und dort etwas zum Download anbietet, freut sich sicher, wenn das Angebot auch genutzt wird. Es kann jedoch passieren, dass die Leitung dadurch manchmal ausgelastet ist. Das macht jeden eigenen Internetzugriff sehr langsam und kann sogar Timeouts zur Folge haben.

Abhilfe kann man mit Traffic Shaping schaffen, das ziemlich komplex einzurichten ist. Mit Apache als Webserver gibt es eine einfachere Alternative: mod_ratelimit.

Machen wir uns ohne Umschweife an die Konfiguration. Zuerst muss man dafür sorgen, dass das Modul geladen wird:

LoadModule ratelimit_module /usr/lib/apache2/modules/mod_ratelimit.so

In der Regel muss man diese Zeile nicht einfügen, sondern die Konfigurationsdatei, in der sie steht, aktivieren. Da viele Apache-Installationen die Anweisungen zum Laden der verfügbaren Module in einem Verzeichnis mods-available halten und die tatsächlich geladenen in mods-enabled, muss man meist (als Root) folgendes Kommando ausführen:

a2enmod ratelimit

Falls dieses Kommando nicht vorhanden ist, muss man im passenden Verzeichnis (oft /etc/apache2/mods-enabled) folgendes Kommando ausführen:

ln -s ../mods-available/ratelimit.load .

Damit mod_ratelimit funktioniert, muss man sicherstellen, dass auch mod_env geladen wird. a2enmod macht das automatisch.

Für die Konfiguration editieren wir die Konfigurationsdatei von Apache, in der die betroffene VirtualHost-Definition steht. Nehmen wir an, es geht uns um das Verzeichnis /ftp, das in einem <Location>-Abschnitt definiert wird. Das könnte so aussehen:

<Location /ftp>
        AllowOverride None
        Options +Indexes
</Location>

Wir fügen drei Zeilen hinzu, so dass es nun wie folgt aussieht:

<Location /ftp>
        AllowOverride None
        Options +Indexes
        SetOutputFilter RATE_LIMIT
        SetEnv rate-limit 192
        SetEnv rate-initial-burst 1000
</Location>

Dabei muss man sich überlegen, welche Bandbreite man hat und wieviel man davon für Downloads bereitstellen möchte. Ich habe ca. 280 KiB/s insgesamt, daher setze ich das Limit auf 192 (die Einheit ist hier KiB/s). Will man zulassen, dass kleinere Dateien ohne Limit heruntergeladen werden können, kann man rate-initial-burst hinzufügen. Dies ist die Anzahl der Bytes (in KiB), bevor die Begrenzung einsetzt.

Es kann allerdings sein, dass mehr als ein Client zugleich auf die Downloads zugreift und damit das Netzwerk wieder überlastet ist, denn ratelimit scheint für jeden Client separat angewandt zu werden. In diesem Fall kann es angebracht sein, die Option rate-initial-burst wegzulassen und auch die Rate selbst weiter zu begrenzen.

Das ist auch schon alles, was es zu mod_ratelimit zu sagen gibt. Man muss jetzt nur noch den Server neu starten (dazu genügt bereits apache2ctl -k graceful) und das Modul nimmt seine Arbeit auf. Es funktioniert gut und ist um einiges einfacher als die Einrichtung von Traffic Shaping.

  • Das Werk darf vervielfältigt, verbreitet und öffentlich zugänglich gemacht werden, Abwandlungen und Bearbeitungen des Werkes müssen unter den gleichen Bedingungen weitergegeben werden. Der Name des Autors/Rechteinhabers muss in der von ihm festgelegten Weise genannt werden.

    - Weitere Informationen
Pro-Linux
Pro-Linux @Facebook
Neue Nachrichten