<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[沧海一粟]]></title> 
<link>http://www.dzhope.com/index.php</link> 
<description><![CDATA[Web系统架构与服务器运维,php开发]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[沧海一粟]]></copyright>
<item>
<link>http://www.dzhope.com/post//</link>
<title><![CDATA[Linux下Apache并发连接数和带宽控制]]></title> 
<author>jed &lt;jed521@163.com&gt;</author>
<category><![CDATA[服务器技术]]></category>
<pubDate>Thu, 23 Apr 2009 08:27:25 +0000</pubDate> 
<guid>http://www.dzhope.com/post//</guid> 
<description>
<![CDATA[ 
	Linux+Apache的稳定性、安全性和性能以及低廉的价格正在赢得越来越多的市场份额，使用Linux+Apache作网站服务器的朋友也越来越多，而Apache作为一种http服务，相比FTP总是不容易控制，特别是当网站以http方式提供软件/音乐下载时，若是每个用户都开启多个线程并没有带宽的限制，将很快达到http的最大连接数或者造成网络壅塞，使得网站的许多正常服务都无法运行。不过，Apache的使用者们早已开发出了mod_limitipconn和mod_bandwidth两个模块，来控制http的并发连接数和用户所能够使用的带宽，下面将以RedHat Linux 7.3+Apache 1.3.7来说明它们的使用方法。 <br/><br/>一、使用mod_limitipconn限制Apache的并发连接数 <br/><br/>mod_limitipconn可以控制每个IP地址同时连接服务器某一个目录的并发连接数，是一个非常有用的模块，其官方网页是<a href="http://dominia.org/djao/limitipconn.html" target="_blank">http://dominia.org/djao/limitipconn.html</a>，最新版本为for Apache 1.3.7的0.04，并且还有支持Apache 2.x的模块下载，由于本人使用Apache 1.3.7版本，所以请使用2.x版本Apache的朋友到其官方网站察看具体的使用方法。 <br/><br/>mod_limitipconn for Apache 1.3x提供三种安装方式，分别是tar包、rpm安装文件和rpm源文件，由于rpm包只能用在 RedHat 7.x 版本，并且不支持检测代理服务器，所以我们一般都使用tar包的安装方式。 <br/><br/>以管理员方式登陆服务器，然后在服务器上运行wget <a href="http://dominia.org/djao/limit/mod_limitipconn-0.04.tar.gz" target="_blank">http://dominia.org/djao/limit/mod_limitipconn-0.04.tar.gz</a>将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命令放在哪里。 <br/><br/>通过命令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目录中生成的文件拷贝到此处。 <br/><br/>刚才命令自动生成的httpd.conf可能有些错误，在我的系统中，它将LoadModule limitipconn_module modules/mod_limitipconn.so放在了 <br/><br/>　　 <br/>　　LoadModule python_module modules/mod_python.so <br/>　　 <br/><br/>之间，而将AddModule mod_limitipconn.c放在了 <br/><br/>　　 <br/>　　AddModule mod_python.c <br/>　　 <br/><br/>之间，直接造成了mod_limitipconn模块不能正常运行，所以请将这两行分别移动到没有的相应行中，然后请确认mod_status模块已经加载，并且在mod_status下添加了ExtendedStatus On这一行。这时我们的mod_limitipconn模块就安装完毕，下一步就是对某个目录进行并发连接数的设置了。 <br/><br/>mod_limitipconn可以对全局和虚拟主机进行不同的限制，其语法结构都是 <br/><br/>　　 <br/>　　　　 #所限制的目录所在，此处表示主机的根目录 <br/>　　　　　　MaxConnPerIP 3 #所限制的每个IP并发连接数为3个 <br/>　　　　　　NoIPLimit image/* #对图片不做IP限制 <br/>　　　　 <br/>　　　　 #所限制的目录所在，此处表示主机的/mp3目录 <br/>　　　　　　MaxConnPerIP 1 #所限制的每个IP并发连接数为1个 <br/>　　　　　　OnlyIPLimit audio/mpeg video #该限制只对视频和音频格式的文件 <br/>　　　　 <br/>　　 <br/><br/>当对全局进行限制时，将这段代码放在httpd.conf文件没有VirtualHost的地方，若是对某个虚拟主机进行限制，请将其放在和之间，我们可以通过更改Location以及MaxConnPerIP方便的控制所限制的目录和并发连接数。 <br/><br/>最后，只要重新启动Apache服务，并发连接数的限制就可以生效。 <br/><br/>二、使用mod_bandwidth控制Apache的带宽 <br/><br/>Apache 1.3.7实际上带有mod_bandwidth支持，只是没有此模块的so文件，我们所做的就是下载mod_bandwidth的源文件进行编译，并对mod_bandwidth进行相应的设置。 <br/><br/>在下载之前，请先确认自己的Apache配置文件httpd.conf中是否含有 <br/><br/>　　 <br/>　　LoadModule bandwidth_module modules/mod_bandwidth.so <br/>　　 <br/><br/>以及 <br/><br/>　　 <br/>　　AddModule mod_bandwidth.c <br/>　　 <br/><br/>若是没有，请加上 <br/><br/>　　LoadModule bandwidth_module modules/mod_bandwidth.so <br/>　　AddModule mod_bandwidth.c <br/><br/>并且这两行必须分别加在相应区域的最前面，使得这个模块以最低的优先级运行。（不过1.3.7的Apache应该有，呵呵）。 <br/><br/>确认后，请输入wget <a href="ftp://ftp.cohprog.com/pub/apache/module/1.3.0/mod_bandwidth.c" target="_blank">ftp://ftp.cohprog.com/pub/apache/module/1.3.0/mod_bandwidth.c</a>将源文件下载到服务器，然后请使用apxs对其进行编译，编译方法和mod_limitipconn的基本相同，如我输入/usr/sbin/apxs -c mod_bandwidth.c -o /usr/lib/apache(Apache的模块目录），编译程序会自动将编译成功的mod_bandwidth.so文件放到Apache的模块目录，您也可以自己确认一下，若是不正常，拷贝过去即可。 <br/><br/>mod_bandwidth运行时需要一些特定的目录，按照默认情况，请运行以下命令创建并更改目录的权限： <br/><br/>　　mkdir /tmp/apachebw <br/>　　mkdir /tmp/apachebw/link <br/>　　mkdir /tmp/apachebw/master <br/>　　chmod -R 777 /tmp/apachebw <br/><br/>然后再打开httpd.conf文件，加上以下内容 <br/><br/>　　 <br/>　　　　BandWidthDataDir "/tmp/apachebw/" <br/>　　　　BandWidthModule on <br/>　　 <br/><br/>这时，我们就能够对所需要限制带宽的目录进行相应的设置，此处的目录请使用服务器的绝对路径。如我们想限制服务器/home/www/softicp/download/soft目录的下载速度，也就是限制网址<a href="http://download.softicp.com/soft" target="_blank">http://download.softicp.com/soft</a>目录下软件的下载速度，则为httpd.conf文件增加以下内容 <br/><br/>　　 <br/>　　　BandWidth cbifamily.com 0 #来自cbifamily.com的下载不受速度限制 <br/>　　　BandWidth 210.51.21 0 #来自210.51.21网段的下载不受速度限制 <br/>　　　BandWidth all 327680 #来自其它网段的速度都限制为327680Byte，即30KB/s <br/>　　 <br/><br/>设置完毕后，重新启动Apache服务，即可生效。 <br/><br/>mod_bandwidth还有许多其它有用的参数，如在中间加上MaxConnection 120则可以限制某个目录的最多连接数，当超过指定连接数时，拒绝新的连接，此参数与mod_limitipconn模块结合可以控制某个目录的最多连接人数。 <br/><br/>其它的参数请朋友们到其官方网站<a href="http://www.cohprog.com/v3/bandwidth/doc-en.html" target="_blank">http://www.cohprog.com/v3/bandwidth/doc-en.html</a>察看相关的文档。 <br/><br/>Apache的功能确实强大，很多功能都可以通过添加模块来实现，在<a href="http://modules.apache.org/" target="_blank">http://modules.apache.org/</a>可以找到更多的模块，我们也可以编写自己的模块来实现相应的功能。 <br/>Tags - <a href="http://www.dzhope.com/tags/linux/" rel="tag">linux</a> , <a href="http://www.dzhope.com/tags/apache/" rel="tag">apache</a> , <a href="http://www.dzhope.com/tags/%25E5%25B9%25B6%25E5%258F%2591/" rel="tag">并发</a>
]]>
</description>
</item><item>
<link>http://www.dzhope.com/post//#blogcomment</link>
<title><![CDATA[[评论] Linux下Apache并发连接数和带宽控制]]></title> 
<author> &lt;user@domain.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate> 
<guid>http://www.dzhope.com/post//#blogcomment</guid> 
<description>
<![CDATA[ 
	
]]>
</description>
</item>
</channel>
</rss>