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/ 可以找到更多的模块,我们也可以编写自己的模块来实现相应的功能。

转载于:https://www.cnblogs.com/villion/archive/2009/07/08/1893772.html

Linux下Apache并发连接数和带宽控制相关推荐

  1. linux下apache服务器的配置和管理(启动、重启、中断服务)

    2019独角兽企业重金招聘Python工程师标准>>> linux下apache服务器的配置和管理 一.两个重要目录: Apache有两个重要的目录: 1.配置目录/etc/http ...

  2. Linux下Apache虚拟主机配置

    说明: Apache版本:httpd-2.2.31 Apache安装目录:/usr/local/apache 目的: 配置Apache虚拟主机 具体操作: 1.修改Apache主配置文件 cp /us ...

  3. linux下php的安装路径,Linux下Apache、PHP、MySQL默认安装路径

    Apache: 如果采用RPM包安装,安装路径应在 /etc/httpd 目录下 Apache配置文件:/etc/httpd/conf/httpd.conf Apache模块路径:/usr/sbin/ ...

  4. Linux下Apache自动监测重启脚本

    Linux下Apache自动监测重启脚本(智能化程度较高) 本站原创 [基于 署名-非商业使用-相同方式分享 2.5 协议,转载须注明链接] 本文所述apache监控脚本已经过VPS管理百科验证 由于 ...

  5. php apache 配置文件,Linux下apache支持PHP配置文件的方法

    本文用来记忆整了两天的lamp环境,如果对PHP没有要求建议全部用yum 一键安装,纯属个人经验,主要作用是用来参考的. yum install httpd #yum 安装Apache. php编译安 ...

  6. apache php 整合 linux,Linux下Apache、php3、MySQL的整合

    Linux下Apache.php3.MySQL的整合 发布时间:2005-05-19 00:03:08来源:红联作者:ming 一.所需的安装包 apache_1.3.19.tar.gz php-4. ...

  7. 重启apache下php,linux下apache重启并查看php环境

    本文主要和大家分享linux下apache重启并查看php环境,本文主要以代码来和大家分享,希望能帮助到大家. 首先切换到init.d目录下cd /etc/rc.d/init.d 然后ls列出目录: ...

  8. linux mysql端口启动失败怎么办,Linux下apache mysql等服务修改默认端口后无法正常启动解决办法...

    Linux下apache mysql等服务修改默认端口后无法正常启动解决办法 linux下 apache 等服务修改默认端口后无法正常启动解决办法 服务器上装了两个webserver,一个是nginx ...

  9. linux下apache 的安装,php安装过程

    linux下apache 的安装 1.进入work目录下:cd /usr/local/work (如没有则自己新建,命令:mkdir /usr/local/work)   2.在work目录下从网站下 ...

最新文章

  1. 全新WiFi技术问世 更适合智能家庭和物联网
  2. 知识图谱推理问答:如何让机器像人类一样学会推理
  3. java生成自己定义的表ID
  4. 凯撒密码C语言去掉空格字符,凯撒密码的问题C语言
  5. 转:如何提高自己的归纳总结能力?
  6. IE浏览器兼容性处理与提示
  7. linux虚拟机 xen,XEN虚拟机在Linux上的安装和使用教程分享
  8. 接管客厅第一步:联想智能音箱体验评测
  9. 高通QCA9377 WiFi蓝牙模块芯片介绍
  10. sqlyog注册码激活
  11. linux如何搭建sftp服务器
  12. RecycleView使用reverse,MIUI截长屏无法截全屏的问题
  13. 2108 JAVASE每日复习总结 链接汇总
  14. android 指南针 原理,手机指南针原理是什么?安卓/苹果手机指南针app工作原理介绍...
  15. 浏览器内多个标签页之间的通信方式有哪些?
  16. 网站被劫持 网站被劫持跳转到非法页面的解决办法
  17. unity中移动部件靠近时触发动画,模型替换特效演示
  18. 华为荣耀magic是鸿蒙系统,荣耀Magic3是什么系统-采用什么系统
  19. uni-app App权限配置
  20. bqstudio软件操作指南

热门文章

  1. Expression: _CrtIsValidHeapPointer(pUserData)
  2. 初始html(常用标签)
  3. C#全局键盘监听(Hook)的使用(转载)
  4. 符号隔开数字求最大值
  5. IOS APP配置.plist汇总(转自coolweather )
  6. cmd.exe命令行方式执行matlab代码 【转】
  7. SynchronizedMap和ConcurrentHashMap的深入分析
  8. mysql 查询执行计划_mysql8 参考手册--了解查询执行计划,使用EXPLAIN优化查询
  9. Windows PE 第八章 延迟加载导入表
  10. UVA11889(给出lcm(A,B)=C中的AC求最小的B)