Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2554259
  • 博文数量: 709
  • 博客积分: 12251
  • 博客等级: 上将
  • 技术积分: 7905
  • 用 户 组: 普通用户
  • 注册时间: 2005-07-17 00:00
个人简介

实现有价值的IT服务

文章存档

2012年(7)

2011年(147)

2009年(3)

2008年(5)

2007年(74)

2006年(431)

2005年(42)

分类: 系统运维

2005-11-21 11:55:12

Linux下Apache并发连接数带宽控制

Linux下Apache并发连接数带宽控制
 
2004-09-02 10:18  作者:   来源:pcicp
 
 
--------------------------------------------------------------------------------
 
【简 介】
    Linux+Apache的稳定性、安全性和性能以及低廉的价格正在赢得越来越多的市场份额,使用Linux+Apache作网站服务器的朋友也越来越多,而Apache作为一种http服务,相比FTP总是不容易控制,特别是当网站以http方式提供软件/音乐下载时,若是每个用户都开启多个线程并没有带宽的限制,将很快达到http的最大连接数或者造成网络壅塞,使得网站的许多正常服务都无法运行。
 
开始阅读 查看评论
 
 
 
 
  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地址同时连接服务器某一个目录的并发连接数,是一个非常有用的模块,其官方网页是href=,最新版本为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 将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放在了  
    LoadModule python_module modules/mod_python.so  
  之间,而将AddModule mod_limitipconn.c放在了  
    AddModule mod_python.c  
  之间,直接造成了mod_limitipconn模块不能正常运行,所以请将这两行分别移动到没有的相应行中,然后请确认mod_status模块已经加载,并且在mod_status下添加了ExtendedStatus On这一行。这时我们的mod_limitipconn模块就安装完毕,下一步就是对某个目录进行并发连接数的设置了。  
  mod_limitipconn可以对全局和虚拟主机进行不同的限制,其语法结构都是  
       #所限制的目录所在,此处表示主机的根目录
        MaxConnPerIP 3 #所限制的每个IP并发连接数为3个
        NoIPLimit image/* #对图片不做IP限制 
       #所限制的目录所在,此处表示主机的/mp3目录
        MaxConnPerIP 1 #所限制的每个IP并发连接数为1个
        OnlyIPLimit audio/mpeg video #该限制只对视频和音频格式的文件  
  当对全局进行限制时,将这段代码放在httpd.conf文件没有VirtualHost的地方,若是对某个虚拟主机进行限制,请将其放在和之间,我们可以通过更改Location以及MaxConnPerIP方便的控制所限制的目录和并发连接数。  
  最后,只要重新启动Apache服务,并发连接数的限制就可以生效。  
  二、使用mod_bandwidth控制Apache的带宽  
  Apache 1.3.7实际上带有mod_bandwidth支持,只是没有此模块的so文件,我们所做的就是下载mod_bandwidth的源文件进行编译,并对mod_bandwidth进行相应的设置。  
  在下载之前,请先确认自己的Apache配置文件httpd.conf中是否含有  
    LoadModule bandwidth_module modules/mod_bandwidth.so  
  以及  
    AddModule mod_bandwidth.c  
  若是没有,请加上
  LoadModule bandwidth_module modules/mod_bandwidth.so
    AddModule mod_bandwidth.c 
  并且这两行必须分别加在相应区域的最前面,使得这个模块以最低的优先级运行。(不过1.3.7的Apache应该有,呵呵)。  
  确认后,请输入wget 将源文件下载到服务器,然后请使用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文件,加上以下内容  
      BandWidthDataDir "/tmp/apachebw/"
      BandWidthModule on  
  这时,我们就能够对所需要限制带宽的目录进行相应的设置,此处的目录请使用服务器的绝对路径。如我们想限制服务器/home/www/softicp/download/soft目录的下载速度,也就是限制网址目录下软件的下载速度,则为httpd.conf文件增加以下内容  
     BandWidth cbifamily.com 0 #来自cbifamily.com的下载不受速度限制
     BandWidth 210.51.21 0 #来自210.51.21网段的下载不受速度限制
     BandWidth all 327680 #来自其它网段的速度都限制为327680Byte,即30KB/s  
  设置完毕后,重新启动Apache服务,即可生效。  
  mod_bandwidth还有许多其它有用的参数,如在中间加上MaxConnection 120则可以限制某个目录的最多连接数,当超过指定连接数时,拒绝新的连接,此参数与mod_limitipconn模块结合可以控制某个目录的最多连接人数。 
  其它的参数请朋友们到其官方网站察看相关的文档。  
  Apache的功能确实强大,很多功能都可以通过添加模块来实现,在可以找到更多的模块,我们也可以编写自己的模块来实现相应的功能。  
=========================================================

使用mod_limitipconn.c来限制apache的并发数

发布于2005-05-28 被读414次 【字体:

作者:冷风
下载mod_limitipconn.c



  • (proxy client detection feature not enabled)

我用的是tar包下载的是mod_limitipconn-0.04.tar.gz,(该模块已经可以支持apache2)在服务器上执行

# wget 下载到本地

然后执行下面的命令编译安装.我的apache位于/usr/local/apache目录

解压缩:

[root@ns chenlf]# tar zxvf mod_limitipconn-0.04.tar.gz
mod_limitipconn-0.04/
mod_limitipconn-0.04/Makefile
mod_limitipconn-0.04/README
mod_limitipconn-0.04/apachesrc.diff
mod_limitipconn-0.04/mod_limitipconn.c
mod_limitipconn-0.04/ChangeLog

编译安装:


[root@ns chenlf]# cd mod_limitipconn-0.04
[root@ns mod_limitipconn-0.04]# ls
apachesrc.diff ChangeLog Makefile mod_limitipconn.c README
[root@ns mod_limitipconn-0.04]# /usr/local/apache/bin/apxs -c -i -a mod_limitipconn.c
gcc -DLINUX=22 -I/usr/include/db1 -fpic -DSHARED_MODULE -I/usr/local/apache/include -c mod_limitipconn.c
gcc -shared -o mod_limitipconn.so mod_limitipconn.o
[activating module `limitipconn' in /usr/local/apache/conf/httpd.conf]
cp mod_limitipconn.so /usr/local/apache/libexec/mod_limitipconn.so
chmod 755 /usr/local/apache/libexec/mod_limitipconn.so
cp /usr/local/apache/conf/httpd.conf /usr/local/apache/conf/httpd.conf.bak
cp /usr/local/apache/conf/httpd.conf.new /usr/local/apache/conf/httpd.conf
rm /usr/local/apache/conf/httpd.conf.new

修改配置文件:

1全局控制:

在httpd.conf加上以下几行:


                   # 所有虚拟主机的/目录
        MaxConnPerIP 3
        # 每IP只允许3个并发连接
        NoIPLimit image/*      # 对图片不做IP限制
   

                # 所有主机的/mp3目录
MaxConnPerIP 1         # 每IP只允许一个连接请求   
OnlyIPLimit audio/mpeg video # 该限制只对视频和音频格式的文件
   


2 局部限制,你也可以在虚拟主机的配置文件里设置IP限制,方法是完全一样:

xx.xxx.xx.xx>
ServerAdmin

DocumentRoot /home/my
ServerName


                   # 所有虚拟主机的/目录
        MaxConnPerIP
5         # 每IP只允许3个并发连接
        NoIPLimit image/*      # 对图片不做IP限制
   
                # 所有主机的/mp3目录
MaxConnPerIP 2         # 每IP只允许一个连接请求   
OnlyIPLimit audio/mpeg video # 该限制只对视频和音频格式的文件
   


ErrorLog /home/my/logs/error_log
CustomLog /home/my/logs/access_log
common

3 此外必须将apacheExtendedStatus设置为ON.在httpd.conf找到
#
ExtendedStatus On
去掉前面的注释即可

好了,全部配置结束,重起apache就可以生效了

================================

#1 mod_bandwidth选项简单说明

mod_bandwidth选项简单说明:  

BandWidthPulse  
格式: BandWidthPulse <毫秒(千分之一秒>  
默认: 1000  
上下文: per server config  

改变计算带宽的时间间隔,默认为1000毫秒(1秒)。使用更低的间隔可以获得  
更精确的带宽控制,但消耗更多的CPU时间,反之亦然。  

BandWidth  
格式: BandWidth <速率>  
默认: 无  
上下文: per directory, .htaccess  

限制这个目录下文件下载的速率。  

domain 指定来自哪个域的连接受到这个设置的影响。  
ip 指定来自哪个ip地址(或者ip段)的连接受到影响。  
all 所有连接都受到影响。  

示例:  

  
# 来自 dualface.com 的连接不限制下载速度  
BandWidth dualface.com 0  
# 来自 192.168.0.0/16(或者192.168.0) 网段的连接不限制下载速度  
BandWidth 192.168.0.0/16 0  
# 其他连接限制下载速度为每秒1024字节  
BandWidth all 1024  
# 越前面的设置优先权越高  
  

LargeFileLimit  
格式: LargeFileLimit <文件大小> <速率>  
默认: 无  
上下文: per directory, .htaccess  

对于超过指定大小的文件,下载时使用的速率。如果速率设置0即不限制速度,  
但下载速度仍然要受到BandWidth设置的影响。如果设置成-1,则完全不受影响。  
通过设置不同的文件大小和速率,可以设置不同大小范围内文件的下载速度。  

示例:  

文件尺寸大于等于200千字节的文件,下载速率为每秒3072字节  
LargeFileLimit 200 3072  
LargeFileLimit 1024 2048  
MaxConnection  
格式: MaxConnection <连接数>  
默认: 0 (不限制)  
上下文: per directory, .htaccess  

当超过指定连接数时,拒绝新的连接。  

MinBandWidth  
格式: MinBandWidth <速率>  
默认: all 256  
上下文: per directory, .htaccess  

设置最小带宽,默认为每秒256字节。根据BandWidth和LargeFileLimit设置的速  
率。mod_bandwidth会计算允许的连接数。例如BandWidth为4096字节,而  
MinBandWidth为1024字节,则最大并发连接数为4。

Mod_limitipconn选项简单说明:

                        设置要控制的目录
MaxConnPerIP 2                     限制单IP并发连接数
NoIPLimit image/*                   不受限制的文件类型
  
  
MaxConnPerIP 1  
OnlyIPLimit audio/mpeg video          仅用于限制的文件类型


mod_bandwidth官方站
[url][/url]

阅读(870) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~