Limit Download Speed with Apache

By  on  

My adventures into retro gaming have brought me back into the semi-seedy world of piracy websites and the technology considerations that dictate their business model.  Annoying popups and pornographic advertisements aside, the most obvious technological observation I made was that each of these sites used bandwidth throttling as a way to make money.  Want that game to download quickly?  Stump up $10 per month and it will be lightning fast; otherwise you're relegated to sleep-inducing download speeds.

In researching download speed limits, it became apparent that dynamic rate limitation is incredibly inefficient, and that the best way to throttle downloads is by configuring different servers or virtual directories with different download speeds, and directing each user to each server based on the download speed they should have.

Configuring Apache's Download Speed Limit

To throttle the download speed on Apache servers, enable the mod_ratelimit extension:

<!-- Requires 2.4+ -->
LoadModule ratelimit_module modules/mod_ratelimit.so

Then set different download speeds by directory with the following Apache configuration:

<IfModule mod_ratelimit.c>
    <!-- 100kb/second limit -->
    <Location /tier1>
        SetOutputFilter RATE_LIMIT
        SetEnv rate-limit 100
    </Location>

    <!-- 500kb/second limit -->
    <Location /tier2>
        SetOutputFilter RATE_LIMIT
        SetEnv rate-limit 500
    </Location>
</IfModule>

Some type of dynamic Apache config would allow custom URLs per user which would obscure download speed URLs so users couldn't dynamically spoof URLs to get some else's download speed.

The download speed limit and throttling business seems booming: just look at MEGA and other likewise services.  The science behind download throttling is big business and I hope to learn more about it.  In the mean time, it's nice to know that download speed limitation can be done with a few Apache directives!

Recent Features

  • By
    Vibration API

    Many of the new APIs provided to us by browser vendors are more targeted toward the mobile user than the desktop user.  One of those simple APIs the Vibration API.  The Vibration API allows developers to direct the device, using JavaScript, to vibrate in...

  • By
    5 More HTML5 APIs You Didn&#8217;t Know Existed

    The HTML5 revolution has provided us some awesome JavaScript and HTML APIs.  Some are APIs we knew we've needed for years, others are cutting edge mobile and desktop helpers.  Regardless of API strength or purpose, anything to help us better do our job is a...

Incredible Demos

  • By
    Animated AJAX Record Deletion Using Dojo

    I'm a huge fan of WordPress' method of individual article deletion. You click the delete link, the menu item animates red, and the item disappears. Here's how to achieve that functionality with Dojo JavaScript. The PHP - Content & Header The following snippet goes at the...

  • By
    LightFace:  Facebook Lightbox for MooTools

    One of the web components I've always loved has been Facebook's modal dialog.  This "lightbox" isn't like others:  no dark overlay, no obnoxious animating to size, and it doesn't try to do "too much."  With Facebook's dialog in mind, I've created LightFace:  a Facebook lightbox...

Discussion

  1. is it possible to limit only download thread for download managers?? like In internet download manager there is setting up to 32 threads.

Wrap your code in <pre class="{language}"></pre> tags, link to a GitHub gist, JSFiddle fiddle, or CodePen pen to embed!