zoukankan      html  css  js  c++  java
  • Linux下Apache并发连接数和带宽控制

    Linux+Apache的稳定性、安全性和性能以及低廉的价格正在赢得越来越多的市场份额,使 用Linux+Apache作网站服务器的朋友也越来越多,而Apache作为一种http服务,相比FTP总是不容易控制,特别是当网站以http方式 提供软件/音乐下载时,若是每个用户都开启多个线程并没有带宽的限制,将很快达到http的最大连接数或者造成网络壅塞,使得网站的许多正常服务都无法运 行。不过,Apache的使用者们早已开发出了mod_limitipconn和mod_bandwidth两个模块,来控制http的并发连接数和用户 所能够使用的带宽,下面将以RedHat Linux 7.3+Apache 1.3.7来说明它们的使用方法。

    一、使用mod_limitipconn限制Apache的并发连接数

      mod_limitipconn可以控制每个IP地址同时连接服务器某一个目录的并发连接数,是一个非常有用的模块,其官方网页是 http://dominia.org/djao/limitipconn.html,最新版本为for Apache 1.3.7的0.04,并且还有支持Apache 2.x的模块下载,由于本人使用Apache 1.3.7版本,所以请使用2.x版本Apache的朋友到其官方网站察看具体的使用方法。

      mod_limitipconn for Apache 1.3x提供三种安装方式,分别是tar包、rpm安装文件和rpm源文件,由于rpm包只能用在 RedHat 7.x 版本,并且不支持检测代理服务器,所以我们一般都使用tar包的安装方式。

      以管理员方式登陆服务器,然后在服务器上运行 wget http://dominia.org/djao/limit/mod_limitipconn-0.04.tar.gz 将mod_limitipconn的tar包下载到服务器,然后按照再运行tar zxvf mod_limitipconn-0.04.tar.gz将tar包解压缩,会在当前目录下生成mod_limitipconn-0.04目录,然后cd mod_limitipconn-0.04进入此目录,下一步就是使用apxs将目录中的mod_limitipconn.c编译。这时,我们需要确定自 己的Apache安装在那个目录,并且找到apxs命令放在哪里。

      通过命令whereis apxs,我们可以确定apxs命令的路径,如我的apxs命令所在为/usr/sbin/apxs,则输入/usr/sbin/apxs -c -i -a mod_limitipconn.c对mod_limitipconn.c进行编译,此命令会自动在你Apache的配置文件httpd.conf中加入 需要的信息,并且将生成的mod_limitipconn.so模块拷贝到Apache的模块目录。不过为了确认此命令是否正常运作,请首先检查自己的 Apache模块目录(我的是/usr/lib/apache),看内部是否含有mod_limitipconn.so文件,没有的话请将 mod_limitipconn-0.04目录中生成的文件拷贝到此处。

      刚才命令自动生成的httpd.conf可能有些错误,在我的系统中,它将LoadModule limitipconn_module modules/mod_limitipconn.so放在了

    <IfDefine HAVE_PYTHON>
    LoadModule python_module modules/mod_python.so
    </IfDefine>

    之间,而将AddModule mod_limitipconn.c放在了

    <IfDefine HAVE_PYTHON>
    AddModule mod_python.c
    </IfDefine>

    之间,直接造成了mod_limitipconn模块不能正常运行,所以请将这两行分别移动到没 有<IfDefine></IfDefine>的相应行中,然后请确认mod_status模块已经加载,并且在 mod_status下添加了ExtendedStatus On这一行。这时我们的mod_limitipconn模块就安装完毕,下一步就是对某个目录进行并发连接数的设置了。

      mod_limitipconn可以对全局和虚拟主机进行不同的限制,其语法结构都是

    <IfModule mod_limitipconn.c>
    <Location /> #所限制的目录所在,此处表示主机的根目录
    MaxConnPerIP 3 #所限制的每个IP并发连接数为3个
    NoIPLimit image/* #对图片不做IP限制
    </Location>
    <Location /mp3> #所限制的目录所在,此处表示主机的/mp3目录
    MaxConnPerIP 1 #所限制的每个IP并发连接数为1个
    OnlyIPLimit audio/mpeg video #该限制只对视频和音频格式的文件
    </Location>
    </IfModule>

      当对全局进行限制时,将这段代码放在httpd.conf文件没有VirtualHost的地方,若是对某个虚拟主机进行限制,请将其放 在<VirtualHost xxx.xxx.xxx.xxx>和</VirtualHost>之间,我们可以通过更改Location以及 MaxConnPerIP方便的控制所限制的目录和并发连接数。

      最后,只要重新启动Apache服务,并发连接数的限制就可以生效。

    二、使用mod_bandwidth控制Apache的带宽

      Apache 1.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
    libexec/apache/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 /thinkjam/download/soft目录的下载速度,也就是限制网址http://download.thinkjam.org/soft目 录下软件的下载速度,则为httpd.conf文件增加以下内容

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

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

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

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

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

  • 相关阅读:
    11. Container With Most Water
    9. Palindrome Number
    375. 猜数字大小 II leetcode java
    leetcode 72 编辑距离 JAVA
    73. 矩阵置零 leetcode JAVA
    快速排序 JAVA实现
    63. 不同路径 II leetcode JAVA
    重写(override)与重载(overload)
    62 不同路径 leetcode JAVA
    leetcode 56 合并区间 JAVA
  • 原文地址:https://www.cnblogs.com/wangyao3568/p/7675810.html
Copyright © 2011-2022 走看看