在 Ubuntu 12.10 中限制 Web 的上行速率

在 Ubuntu 12.10 中限制 Web 的上行速率

我发现此主题,但在调整网络设置时我却犹豫不决。

我想要做的是限制人们从我的网络服务器远程下载文件的速率。LAN 连接仍应能够全速传输,但本地网络之外的任何内容都应限制为每连接 200Kbps。这可能吗?我可以限制每个客户端的连接数(可能通过 IP)吗?

如果无法在操作系统级别完成此操作,我可以使用 PHP 编写脚本吗?也许将 X 个字节读入文件然后休眠...

提前致谢!

答案1

我确信这样的事情是可以实现的,因为有些文件存储/共享网站会限制下载速度和同时下载数量。我个人不知道如何实现这种事情,但我希望能给你指明正确的方向。

看看令牌桶漏水的桶算法。

我相信你可以安装和配置 Apache 模块来帮助解决此类问题。尝试查看mod_cbandiptables

祝你好运!

更新

如果你正在寻找通过 PHP 实现此目的的方法,你可以尝试这个(来源):

// local file that should be send to the client
$local_file = 'test-file.zip';

// filename that the user gets as default
$download_file = 'your-download-name.zip';

// set the download rate limit (=> 20,5 kb/s)
$download_rate = 20.5;

if(file_exists($local_file) && is_file($local_file)) {

    // send headers
    header('Cache-control: private');
    header('Content-Type: application/octet-stream');
    header('Content-Length: '.filesize($local_file));
    header('Content-Disposition: filename='.$download_file);

    // flush content
    flush();

    // open file stream
    $file = fopen($local_file, "r");

    while (!feof($file)) {

        // send the current file part to the browser
        print fread($file, round($download_rate * 1024));

        // flush the content to the browser
        flush();

        // sleep one second
        sleep(1);
    }

    // close file stream
    fclose($file);

}
else {
    die('Error: The file '.$local_file.' does not exist!');
}

相关内容