使用mod_bandwidth控制Apache的带宽

01月 29th, 2008

Apache1.3.7实际上带有mod_bandwidth支持,只是没有此模块的so文件,我们所做的就是下载mod_bandwidth的源文件进行编译,并对mod_bandwidth进行相应的设置。
    在下载之前,请先确认自己的Apache配置文件httpd.conf中是否含有

<IFDEFINE HAVE_BANDWIDTH>
LoadModule bandwidth_module modules/mod_bandwidth.so
</IFDEFINE>

以及

<IFDEFINE HAVE_BANDWIDTH>
AddModule mod_bandwidth.c
</IFDEFINE>

若是没有,请加上

    LoadModule bandwidth_module modules/mod_bandwidth.so

  AddModule mod_bandwidth.c

    并且这两行必须分别加在相应区域的最前面,使得这个模块以最低的优先级运行。(不过1.3.7的Apache应该有,呵呵)。

    确认后,请输入wget.ftp://ftp.cohprog.com/pub/apache/module/1.3.0/mod_bandwidth.c将源文件下载到服务器,然后请使用apxs对其进行编译,编译方法和mod_limitipconn的基本相同,如我输入/usr/sbin/apxs -c mod_bandwidth.c -o /usr/lib/apache(Apache的模块目录),编译程序会自动将编译成功的mod_bandwidth.so文件放到Apache的模块目录,您也可以自己确认一下,若是不正常,拷贝过去即可。

    mod_bandwidth运行时需要一些特定的目录,按照默认情况,请运行以下命令创建并更改目录的权限:

   mkdir /tmp/apachebw

  mkdir /tmp/apachebw/link

  mkdir /tmp/apachebw/master

  chmod -R 777 /tmp/apachebw

    然后再打开httpd.conf文件,加上以下内容

<IFMODULE mod_bandwidth.c>
BandWidthDataDir "/tmp/apachebw/"
BandWidthModule on
</IFMODULE>

    这时,我们就能够对所需要限制带宽的目录进行相应的设置,此处的目录请使用服务器的绝对路径。如我们想限制服务器/home/www/softicp/download/soft目录的下载速度,也就是限制网址http://download.softicp.com/soft目录下软件的下载速度,则为httpd.conf文件增加以下内容

<DIRECTORY soft download softicp www home>
BandWidth cbifamily.com 0 #来自cbifamily.com的下载不受速度限制
BandWidth 210.51.21 0 #来自210.51.21网段的下载不受速度限制
BandWidth all 327680 #来自其它网段的速度都限制为327680Byte,即30KB/s
</DIRECTORY>

  设置完毕后,重新启动Apache服务,即可生效。

    mod_bandwidth还有许多其它有用的参数,如在DIRECTORY和/DIRECTORY中间加上MaxConnection120则可以限制某个目录的最多连接数,当超过指定连接数时,拒绝新的连接,此参数与mod_limitipconn模块结合可以控制某个目录的最多连接人数。

    其它的参数请朋友们到其官方网站http://www.cohprog.com/v3/bandwidth/doc-en.html察看相关的文档。

    Apache的功能确实强大,很多功能都可以通过添加模块来实现,在http://modules.apache.org/可以找到更多的模块,我们也可以编写自己的模块来实现相应的功能。

 



发表回复