http://www.baidu.com/s?wd=mod_cband
http://hi.baidu.com/e0easy/blog/ ... 67450134fa4129.html
mod_cband- 一个Apache HTTP Server Version 2下的针对每用户、每虚拟主机和每一目的的带宽控制模块
1. 各种指令中可以使用的单位:
* 传输速度限制单位:
o kbps, Mbps, Gbps- 每秒传输的比特数, 分别为: 1024,1024*1024 和 1024*1024*1024 bps
o kb/s , MB/s, Gb/s-每秒传输的字节数, 分别为: 1024,1024*1024 和 1024*1024*1024 b/s
o 默认单位是kbps
* 传输容量限额单位:
o K,M,G- 分别为: 1000,1000*1000 和 1000*1000*1000 字节
o Ki,Mi,Gi - 分别为: 1024,1024*1024 和 1024*1024*1024 字节
o 默认单位是K
* 时间限额单位:
o S , M , H , D, W- 秒,分钟,小时,天,周; 分别为: 1,60,3600,86400,604800 秒
o 默认单位是秒
2. 指令详解
指令名称:CBandDefaultExceededURL
描 述:指定当mod_cband侦测到发生虚拟主机或用用传输超限发生成,将把所有客户发起的请求重定向到的网址
注 意: 如果你没有指定要跳转的URL,则发送标准 503:Service Unavailable出
错信息
配置位置: Server config
语 法: CBandDefaultExceededURL URL
指令名称:CBandDefaultExceededCode
描 述:当超限发生时,发给用户的http错误码
配置位置:Server config
语 法:CBandDefaultExceededCode HTTP_CODE
例 子:CBandDefaultExceededCode 509
指令名称:CBandScoreFlushPeriod
描 述:为虚拟主机或用户设定一个请求数阀值,在达到阀值时将把请求数写到scoreboard文件中。 使用这个参数将有助于提高mod_cband的性能。
默 认 值:1
配置位置:Server config
语 法:CBandScoreFlushPeriod number_of_requests(请求数)
例 子:CBandScoreFlushPeriod 100
任意虚拟主机或用户,在达到指定的请求数之后,将被记入scoreboard
指令名称:CBandSpeed
描 述:为虚拟主机设定最大传输速度
配置位置:<Virtualhost>
语 法:CBandSpeed kbps rps max_conn
kbps - 最大的传输速度:[kMG]bps 或都[kMG]B/s
rps - 每秒的最大请求数
max_conn- 最大并发连接数
例 子:CBandSpeed 1024 10 30
设定最大传速度为: 1024kbps (每秒 1024*1024 位元),
最大每秒 10个请求和 最多30个并发连接
注 意:从 0.9.6.0 版开始支持这个功能
指令名称:CBandRemoteSpeed
描 述:指定任意远程客户端的最大速度
配置位置:<Virtualhost>
语 法:CBandRemoteSpeed kbps rps max_conn
kpbs - 最大传输速度: [kMG] bps 或 [kMG] B/s
rps - 每秒的最大请求数
max_conn- 最大并发连接
例 子:BandRemoteSpeed 20kb/s 33
最大速度为 20kB/s(20*1024 bytes/秒),
每秒最多接受2个远端客户请求和 3个并发连接
注 意:从 0.9.6.1-rc2开始支持这个功能
指令名称:CBandClassRemoteSpeed
描 述:为特定地址段的远端客户指定最大的速度
配置位置:<Virtualhost>
语 法:CBandClassRemoteSpeed class_name kpbs rps
class_name- 已定义的地址类名
kbps - 最大传输速度:kbps或kB/s
rps- 每秒的最大请求数
max_conn- 最大并发连接数
例 子:<CBandClass googlebot_class>
CBandClassDst 66.249.64/24
CBandClassDst 66.249.65/24
CBandClassDst 66.249.79/24
</CBandClass>
CBandClassRemoteSpeed googlebot_class 20kb/s 2 3
设定最大的传输速度为: 20kB/s( 20*1024bytes/s),
在指定了地址范围内(googlebot_class)的远端客户中,每秒只接受2个请求和 3并发连接
注 意:从 0.9.6.1-rc 2开始支持这一功能
指令名称:CBandRandomPulse
描 述:r.p.g.开关
r.p.g.是mod_cband速度限制的一种方式。它指定了连接检测采样的方式。打开此功能,将持续滚动采样。如果带宽和CPU占用不稳定的时候,关掉此功能。
配置位置:Global
语 法:CBandRandomPulse ON/OFF
指令名称:CBandLimit
描 述:限制虚拟主机的流量
配置位置:<Virtualhost>
语 法:CBandLimit limit
流量限制单位,可以用K、M、G、Ki、Mi、Gi
例 子:CBandLimit 10M
限制流量为10M
CBandLimit 10Mi
限制流量为10Mi:10*1024*1024bytes
指令名称:CBandClassLimit
描 述:定义虚拟主机目标类别的流量
配置位置: <Virtualhost>
语 法:CBandClassLimit class_name limit
class_name- 已定义的类别名称
limit - 流量限制单位,可以用K、M、G、Ki、Mi、Gi
指令名称:CBandExceededURL
描 述: 指定当虚拟主机超出带宽或流量时,跳转的URL。提示:如果没有配置此项,将发送标准的503。
配置位置: <Virtualhost>
语 法:CBandExceededURL 网址
指令名称:CBandExceededSpeed
描 述: 定义当虚拟主机流量或带宽超出限制时,mod_cband将调节的最大速度
配置位置: <Virtualhost>
语 法:CBandExceededSpeed kbps rps max_conn
kbps - 最大传送速度,kbps或kB/s
rps- 每秒最大请求数
max_conn- 最大并发连接数
注 意: 从 0.9.6.0 开始支持
指令名称:CBandScoreboard
描 述:指定虚拟主机的scoreboard文件
配置位置:<Virtualhost>
语 法:CBandScoreboard path
注 意: 路径对于Apache用户必须可写
指令名称:CBandPeriod
描 述:定义虚拟主机使用情况重置的周期
配置位置:<Virtualhost>
语 法:CBandPeriod period
可用单位:S(秒)、M(分)、H(小时)、D(天)、W(周)
例 子:CBandPeriod 1W //每周重置
CBandPeriod 14D //每14天重置
CBandPeriod 60M //每小时重置
指令名称:CBandPeriodSlice
描 述:定义CBandPeriod周期内,分部分计算的时间长度
默 认 值:slice_len=limit
配置位置:<Virtualhost>
语 法:CBandPeriodSlice slice_length
例 子:CBandLimit 100G
CBandPeriod 4W
CBandPeriodSlice 1W
一个周期将被分成4个小部分(4周/1周=4)。每部分限制流量100G/4=25G。一周之后slice限制将是50G,两周后将是75G...
指令名称:<CBandUser>
描 述:定义一个新的 cband 用户
配置位置:Server config
语 法:<CBandUser user_name>
指令名称:CBandUserSpeed
描 述:定义cband用户的最大带宽
配置位置:<CBandUser>
语 法:CBandUserSpeed 每秒千个位元组 rps max_conn
kbps - 最大速度:kbps或者kb/s
rps- 每秒请求数
max_conn- 最大连接数
例 子:CBandUserSpeed 100kb/s 105
定义用户的最大熟读为100kB/s,每秒最多10个请求,最大连接数为5
注 意:从 0.9.6.0 开始支持
指令名称:CBandUserLimit
描 述:指定cband user的流量
配置位置:<CBandUser>
语 法:CBandUserLimit limit
limit - 流量可用单位K、M、G、Ki、Mi、Gi
例 子:CBandUserLimit 10M
指定用户流量为10M
CBandUserLimit 10Mi
指定用户流量为10Mi
指令名称:CBandUserClassLimit
描 述: 指定cband user类的流量
配置位置:<CBandUser>
语 法:CBandUserClassLimit class_name limit
class_name- 类名称
limit - 流量大小单位,可用K、M、G、Ki、Mi、Gi
指令名称:CBandUserExceededURL
描 述: 指定当cband user超出限制时,跳转的URL
注 意: 如果没有定义此项,将发送标准的503
配置位置:<CBandUser>
语 法:CBandUserExceededURL URL
指令名称:CBandUserExceededSpeed
描 述: 定义当cband user超出限制时,mod_cband将调节的速度
注 意:只有当CBandUserExceededURL没有设定时,此项才生效
配置位置:<CBandUser>
语 法:CBandUserExceededSpeed kbps rps max_conn
kbps - 最大速度:kpbs或kb/s
rps- 每秒请求数
max_conn- 最大并发数
注 意:从 0.9.6.0 开始支持
指令名称:CBandUserScoreboard
描 述: 定义用户的scoreboard文件
配置位置:<CBandUser>
语 法:CBandUserScoreboard path
注 意:目录必须允许apache用户写入
指令名称:CBandUserPeriod
描 述: 定义cband user计算周期
配置位置:<CBandUser>
语 法:CBandUserPeriod period
period - 可用单位S(秒)、M(分)、H(小时)、D(天)、W(周)
例 子: CBandUserPeriod 1W
CBandUserPeriod 14D
CBandUserPeriod 60M
指令名称:CBandUserPeriodSlice
描 述:定义CBandUserPeriod的分割
默 认 值:slice_len=limit
配置位置:<CBandUser>
语 法:CBandUserPeriodSlice slice_length
例 子:CBandUserLimit 100G
CBandUserPeriod 4W
CBandUserPeriodSlice 1W
CBandUserPeriod将被分割成4个部分(4W/1W=4)。每部分限制流量100G/4=25G。一周之后部分限制将为50G,两周后为75G...
3. 状态管理配置实例
如果要观察实时的流量、使用情况、用户、scoreboard,添加以下内容到配置文件:
<Location /cband-status>
SetHandler cband-status
</Location>
<Location /cband-status-me>
SetHandler cband-status-me
</Location>
这样,你就可以通过以下地址来访问
http://server_name/cband-status
http://server_name/cband-status-me
在0.9.5-rc1之后的版本中,可以通过XML格式来观察
http://server_name/cband-status?xml
http://server_name/cband-status-me?xml
4. 流量带宽配置实例
<VirtualHost *:80>
DocumentRoot /var/www/chinafu.com/
ServerName chinafu.com
CustomLog /var/log/apache2/chinafu.com.access combined
ErrorLog /var/log/apache2/chinafu.com.access.error
RewriteEngine On
RewriteOptions inherit
# 本虚拟机最大带宽为:1024kbps
# 本虚拟机每秒最多能接受10个请求
# 本虚拟机最多30个并发连接
CBandSpeed 1024 10 30
# 每个远程客户端最大带宽10kB/s,每秒最多3个请求,最大连接为2个
CBandRemoteSpeed 10kb/s 3 2
# 对于googlebot_class类的远程用户,最大带宽为20kB/s,每秒最多2个请求,最大连接为3个
CBandClassRemoteSpeed googlebot_class 20kb/s 2 3
</VirtualHost>
5. 流量限制配置实例
按虚拟主机进行流量配置
下面,你可以订制虚拟主机的流量限制、URL和scoreboard文件
# 定义超出流量之后跳转的URLCBandDefaultExceededURL
CBandDefaultExceededURL http://chinafu.com/bandwidth_exceeded.html
<VirtualHost *:80>
DocumentRoot /var/www/chinafu.com/
ServerName chinafu.com
CustomLog /var/log/apache2/chinafu.com.access combined
ErrorLog /var/log/apache2/chinafu.com.access.error
RewriteEngine On
RewriteOptions inherit
# 流量限制为100M
CBandLimit 100000
# 当超过流量时,跳转URL到http://chinafu.com/bandwidth_exceeded.html
CBandExceededURL http://chinafu.com/bandwidth_exceeded.html
# 虚拟主机的scoreboard文件
CBandScoreboard /var/run/apache2/chinafu.com.scoreboard
# scoreboard清空周期(30分钟),仅在0.9.5-rc2之后版本支持
CBandPeriod 30M
</VirtualHost>
按用户指定流量(仅限0.9.1之后版本)
在0.9.1版之后,你可以指定用户限制然后将虚拟主机分配给用户
# 定义用户‘dembol’
<CBandUser dembol>
# 限制用户'dembol'的流量为200MB
CBandUserLimit 200000
# 如果用户超出限制,跳转到URLhttp://chinafu.com/bandwidth_exceeded.html
CBandUserExceededURL http://chinafu.com/bandwidth_exceeded.html
# 用户的scoreboard文件
CBandUserScoreboard /var/run/apache2/dembol.scoreboard
# 清空scoreboard的周期
# (only in >=0.9.5-rc2)
CBandUserPeriod 5W
</CBandUser>
# 将虚拟主机‘chinafu.com’分配给‘dembol’用户
<VirtualHost *:80>
ServerName chinafu.com
# 指定虚拟主机的所有者
CBandUser dembol
</VirtualHost>
# 将虚拟主机‘aga.org’分配给‘dembol’用户
<VirtualHost *:80>
ServerName aga.org
# 指定虚拟主机的所有者
CBandUser dembol
</VirtualHost>
按用户和虚拟主机混合方式指定流量和带宽(仅限于0.9.1之后版本)
在0.9.1版之后,你可以混合用户和虚拟主机方式来指定流量和带宽
# 定义用户 “dembol”
<CBandUser dembol>
# “dembol”用户流量限制为200MB
CBandUserLimit 200000
#如果超出限制,跳转到URLhttp://abc.org/bandwidth_exceeded.html
CBandUserExceededURL http://abc.org/bandwidth_exceeded.html
# 用户的scoreboard文件
CBandUserScoreboard /var/run/apache2/dembol.scoreboard
# 清空scoreboard的周期(4天)
# (only in >=0.9.5-rc2)
CBandUserPeriod 4D
</CBandUser>
# 将虚拟主机“xyz.org”分配给用户“dembol”
<VirtualHost *:80>
ServerName xyz.org
# 指定虚拟主机的所有者
CBandUser dembol
# 限制此虚拟主机流量为100MB
CBandLimit 100000
# 如果超出限制,跳转到URLhttp://abc.org/bandwidth_exceeded.html
CBandExceededURL http://abc.org/bandwidth_exceeded.html
# 虚拟主机的scoreboard文件
CBandScoreboard /var/run/apache2/xyz.org.scoreboard
# a period of time after which the scoreboard will be cleared (50 minutes)
#清空scoreboard的周期(50分钟)
CBandPeriod 50M
</VirtualHost>
# 将虚拟主机“aga.org”分配给用户“dembol”
<VirtualHost *:80>
ServerName aga.org
#指定虚拟主机的所有者
CBandUser dembol
</VirtualHost>
按远程目标指定流量和带宽(仅限0.9.5-rc1之后版本)
在0.9.5-rc1之后,你可以通过来定义远程目标类来指定类的流量和带宽。同时也可以定义CBandClassLimit和CBandUserClassLimit来定义不同的类
# define "class_1"
<CBandClas class_1>
CBandClassDst 217.172.231.67
CBandClassDst 127/8
CBandClassDst 192.168.0.0/24
CBandClassDst 10.0.0.20
</CBandClass>
# 定义 'class_2'
<CBandClas class_2>
CBandClassDst 192.168.100.100
CBandClassDst 153.19/16
</CBandClass>
<CBandUser dembol>
CBandUserLimit 1000000
CBandUserExceededURL http:// edns.pl/bandwidth_exceeded.html
CBandUserScoreboard/home/ dembol/write/user.dembol.scoreboard
# "class_2"限制流量500MB
CBandUserClassLimit class_2 500000
</CBandUser>
<VirtualHost*:80>
...
CBandUser dembol
# "class_1"限制流量1GB
CBandClassLimit class_1 1000000
# 定义scoreboard的清空时间为120秒(仅限0.9.5-rc2以上版本
CBandPeriod 120S
</VirtualHost>
完整配置实例:
# 可以通过http://yourdomain/cband-status查看流量
SetHandler cband-status
# 超出限制,跳转到google
CBandDefaultExceededURL http://www.google.com
# 定义类别
CBandClassDst 217.172.231.67
CBandClassDst 127/8
CBandClassDst 192.168.0.0/24
CBandClassDst 10.0.0.20
CBandClassDst 192.168.100.100
CBandClassDst 153.19/16
CBandClassDst 10.13/16
# 定义用户
CBandUserLimit 100000
CBandUserExceededURL http://server_name.com/bandwidth_exceeded.html
CBandUserScoreboard /home/dembol/write/user.dembol.scoreboard
CBandUserPeriod 10W
CBandUserLimit 1000000
CBandUserExceededURL http://server_name.com/bandwidth_exceeded.html
CBandUserScoreboard /home/dembol/write/user.dembolek.scoreboard
CBandUserClassLimit class_1 50000
CBandUserPeriod 20H
CBandUserLimit 10000000
CBandUserExceededURL http://www.google.com
CBandUserScoreboard /home/dembol/write/user.dembol.nasa.pl.scoreboard
CBandUserClassLimit class_2 3000
CBandUserClassLimit class_3 10000
CBandUserPeriod 2H
NameVirtualHost *:80
DocumentRoot /home/dembol/public_html/dembol.nasa.pl/
ServerName dembol.nasa.pl
ServerAlias *.dembol.nasa.pl
Setenv VLOG /home/dembol/public_html/logs/dembol.nasa.pl.access
CustomLog /home/dembol/public_html/logs/dembol.nasa.pl.access combined
ErrorLog /home/dembol/public_html/logs/dembol.nasa.pl.error
# 设定虚拟主机的cband
CBandLimit 100000000
CBandUser dembol.nasa.pl
CBandExceededURL http://edns.pl/bandwidth_exceeded.html
CBandScoreboard /home/dembol/write/dembol.nasa.pl.scoreboard
CBandClassLimit class_1 10000000
CBandPeriod 200S
DocumentRoot /home/dembol/public_html/dembol.nasa.pl/
ServerName dembol.eu.orgServerAlias *.dembol.eu.org
Setenv VLOG /home/dembol/public_html/logs/dembol.eu.org.access
CustomLog /home/dembol/public_html/logs/dembol.eu.org.access combined
ErrorLog /home/dembol/public_html/logs/dembol.eu.org.error
# 设定虚拟主机的cband
CBandUser dembolek
CBandLimit 10000
CBandExceededURL http://server_name.com/bandwidth_exceeded.html
CBandScoreboard /home/dembolek/write/dembol.eu.org.scoreboard
CBandClassLimit class_1 700000
CBandClassLimit class_2 100000
CBandClassLimit class_3 500000
CBandPeriod 5D
DocumentRoot /home/dembol/public_html/dembol.nasa.pl/cvs_alias
ServerName cvs.cband.linux.pl:80
Setenv VLOG /home/dembol/public_html/logs/cvs.cband.linux.pl.access
CustomLog /home/dembol/public_html/logs/cvs.cband.linux.pl.access combined
ErrorLog /home/dembol/public_html/logs/cvs.cband.linux.pl.error
# 设定虚拟主机的cband
CBandUser dembol
CBandLimit 100000
CBandExceededURL http://server_name.com/bandwidth_exceeded.html
CBandScoreboard /home/dembol/write/dembol.eu.org.scoreboard
CBandClassLimit class_3 20000
CBandPeriod 1W
Performance Tests
性能测试
mod_cband without CBandScoreFlushPeriod directive
mod_cband 不清空score MPM prefork MPM worker MPM perchild MPM event MPM leader
with mod_cband 316.63 rps 346.89 rps ~ 297.36 rps ~
without mod_cband 447.76 rps 406.91 rps ~ 425.13 rps ~
mod_cband with CBandScoreFlushPeriod 100 directive
mod_cband 设定清空score周期为100 MPM prefork MPM worker MPM perchild MPM event MPM leader
with mod_cband 405.17 rps 365.22 rps ~ 414.60 rps ~
without mod_cband 447.76 rps 406.91 rps ~ 425.13 rps ~
Http server: Apache 2.2, default http.conf, compiled with:
Apache2.2版,默认的http.conf配置,按以下方式编译./configure --with-mpm=$1 \
--enable-layout=Slackware \
--enable-v4-mapped \
--enable-cache \
--enable-disk-cache --enable-mem-cache \
--enable-deflate \
--enable-ssl \
--enable-mods-shared=all \
--with-uid=apache --with-gid=apache \
--with-gdbm --with-berkeley-db
Linux kernel: 2.6.14.2-grsec
Linux 内核版本:2.6.14.2-grsec
Machine: 2xPentium II 333MHz, 320MB RAM
机器配置:双PII 333MHz,320MB内存
Network: 100Mbps ethernet
网络:100Mbps以太网
Test command:
测试使用命令httperf --server 192.168.0.25 --port 8 --num-conns 1000 --uri http://www.traktor.pl --hog |