<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet href="http://www.majordojo.com/projects/FeedManager/atom.xsl" type="text/xsl" media="screen"?>
<feed xmlns="http://www.w3.org/2005/Atom" 
      xmlns:thr="http://purl.org/syndication/thread/1.0">
  <link rel="alternate" type="text/html" href="http://www.thinkjam.org/zoptuno/archives/2004/08/linuxaeapachee.html" />
  <link rel="self" type="application/atom+xml" href="http://www.thinkjam.org/zoptuno/archives/2004/08/linuxaeapachee.html" />
  <id>tag:www.thinkjam.org,2009:/zoptuno//2/tag:www.thinkjam.org,2004:/zoptuno//2.15-</id>
  <updated>2009-09-21T03:20:34Z</updated>
  <title>Comments for Linux下Apache并发连接数和带宽控制</title>
  <subtitle>My think. My dream.</subtitle>
  <generator uri="http://www.sixapart.com/movabletype/">Movable Type 4.31-zh-cn</generator>
  <entry>
    <id>tag:www.thinkjam.org,2004:/zoptuno//2.15</id>
    <link rel="alternate" type="text/html" href="http://www.thinkjam.org/zoptuno/archives/2004/08/linuxaeapachee.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://www.thinkjam.org/loveblog/batom.cgi/weblog/blog_id=2/entry_id=15" title="Linux下Apache并发连接数和带宽控制" />
    <published>2004-08-28T07:45:07Z</published>
    <updated>2008-11-07T03:55:18Z</updated>
    <title>Linux下Apache并发连接数和带宽控制</title>
    <summary>　　Linux+Apache的稳定性、安全性和性能以及低廉的价格正在赢得越来越多的市场份额，使用Linux+Apache作网站服务器的朋友也越来越多，而Apache作为一种http服务，相比FTP总是不容易控制，特别是当网站以http方式提供软件/音乐下载时，若是每个用户都开启多个线程并没有带宽的限制，将很快达到http的最大连接数或者造成网络壅塞，使得网站的许多正常服务都无法运行。不过，Apache的使用者们早已开发出了mod_limitipconn和mod_bandwidth两个模块，来控制http的并发连接数和用户所能够使用的带宽，下面将以RedHat Linux 7.3+Apache 1.3.7来说明它们的使用方法。</summary>
    <author>
      <name>平生一笑</name>
      <uri>http://www.thinkjam.org/zoptuno</uri>
    </author>
    
    <category term="服务器" />
    
    <content type="html" xml:lang="en" xml:base="http://www.thinkjam.org/zoptuno/">
      <![CDATA[<p>　　Linux+Apache的稳定性、安全性和性能以及低廉的价格正在赢得越来越多的市场份额，使用Linux+Apache作网站服务器的朋友也越来越多，而Apache作为一种http服务，相比FTP总是不容易控制，特别是当网站以http方式提供软件/音乐下载时，若是每个用户都开启多个线程并没有带宽的限制，将很快达到http的最大连接数或者造成网络壅塞，使得网站的许多正常服务都无法运行。不过，Apache的使用者们早已开发出了mod_limitipconn和mod_bandwidth两个模块，来控制http的并发连接数和用户所能够使用的带宽，下面将以RedHat Linux 7.3+Apache 1.3.7来说明它们的使用方法。</p>]]>
      <![CDATA[<p><strong>一、使用mod_limitipconn限制Apache的并发连接数</strong></p>

<p>　　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的朋友到其官方网站察看具体的使用方法。</p>

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

<p>　　以管理员方式登陆服务器，然后在服务器上运行 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命令放在哪里。</p>

<p>　　通过命令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目录中生成的文件拷贝到此处。</p>

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

<blockquote>&lt;IfDefine HAVE_PYTHON><br />
LoadModule python_module      modules/mod_python.so<br />
&lt;/IfDefine></blockquote>

<p>之间，而将AddModule mod_limitipconn.c放在了</p>

<blockquote>&lt;IfDefine HAVE_PYTHON><br />
AddModule mod_python.c<br />
&lt;/IfDefine></blockquote>

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

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

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

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

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

<p><strong>二、使用mod_bandwidth控制Apache的带宽</strong></p>

<p>　　Apache 1.3.7实际上带有mod_bandwidth支持，只是没有此模块的so文件，我们所做的就是下载mod_bandwidth的源文件进行编译，并对mod_bandwidth进行相应的设置。</p>

<p>　　在下载之前，请先确认自己的Apache配置文件httpd.conf中是否含有</p>

<blockquote>&lt;IfDefine HAVE_BANDWIDTH><br />
LoadModule bandwidth_module   modules/mod_bandwidth.so<br />
&lt;/IfDefine></blockquote>

<p>以及</p>

<blockquote>&lt;IfDefine HAVE_BANDWIDTH><br />
AddModule mod_bandwidth.c<br />
&lt;/IfDefine></blockquote>

<p>若是没有，请加上</p>

<blockquote>LoadModule bandwidth_module<br />   libexec/apache/mod_bandwidth.so<br />
AddModule mod_bandwidth.c</blockquote>

<p>　　并且这两行必须分别加在相应区域的最前面，使得这个模块以最低的优先级运行。（不过1.3.7的Apache应该有，呵呵）。</p>

<p>　　确认后，请输入 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的模块目录，您也可以自己确认一下，若是不正常，拷贝过去即可。</p>

<p>　　mod_bandwidth运行时需要一些特定的目录，按照默认情况，请运行以下命令创建并更改目录的权限：</p>

<blockquote>mkdir /tmp/apachebw<br />
mkdir /tmp/apachebw/link<br />
mkdir /tmp/apachebw/master<br />
chmod -R 777 /tmp/apachebw</blockquote>

<p>　　然后再打开httpd.conf文件，加上以下内容</p>

<blockquote>&lt;IfModule mod_bandwidth.c><br />
        BandWidthDataDir "/tmp/apachebw/"<br />
        BandWidthModule on<br />
&lt;/IfModule></blockquote>

<p>　　这时，我们就能够对所需要限制带宽的目录进行相应的设置，此处的目录请使用服务器的绝对路径。如我们想限制服务器/home/www/thinkjam/download/soft目录的下载速度，也就是限制网址http://download.thinkjam.org/soft目录下软件的下载速度，则为httpd.conf文件增加以下内容</p>

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

<p>　　设置完毕后，重新启动Apache服务，即可生效。</p>

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

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

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

  <entry>
    <id>tag:www.thinkjam.org,2004:/zoptuno//2.15-comment:18</id>
    <thr:in-reply-to ref="tag:www.thinkjam.org,2004:/zoptuno//2.15" type="text/html" href="http://www.thinkjam.org/zoptuno/archives/2004/08/linuxaeapachee.html"/>
    <link rel="alternate" type="text/html" href="http://www.thinkjam.org/zoptuno/archives/2004/08/linuxaeapachee.html#c18" />
    <title>Comment from 恍若如梦 on 2004-12-03</title>
    <author>
        <name>恍若如梦</name>
<!--        <uri>http://sjhome.3322.org/blog</uri> -->
    </author>
    <content type="html" xml:lang="en" xml:base="http://sjhome.3322.org/blog">
	<![CDATA[<p>十分好的文章，谢谢分享！</p>]]>
    </content>
    <published>2004-12-03T09:24:08Z</published>
    <updated>2004-12-03T09:24:08Z</updated>
  </entry>

  <entry>
    <id>tag:www.thinkjam.org,2004:/zoptuno//2.15-comment:19</id>
    <thr:in-reply-to ref="tag:www.thinkjam.org,2004:/zoptuno//2.15" type="text/html" href="http://www.thinkjam.org/zoptuno/archives/2004/08/linuxaeapachee.html"/>
    <link rel="alternate" type="text/html" href="http://www.thinkjam.org/zoptuno/archives/2004/08/linuxaeapachee.html#c19" />
    <title>Comment from 恍若如梦 on 2004-12-04</title>
    <author>
        <name>恍若如梦</name>
<!--        <uri>http://sjhome.3322.org/blog</uri> -->
    </author>
    <content type="html" xml:lang="en" xml:base="http://sjhome.3322.org/blog">
	<![CDATA[<p>HI，站长您好。<br />
按照你的文章，我也在我的服务器上试了试，但没成功，我的apache为2.0，下载的是mod_limitipconn0.22，可以支持apache2.0，安装也成功了。<br />
但重启apache的时候出现问题：<br />
/usr/local/apapche/bin/httpd -k restart<br />
则会出现：<br />
Syntax error on line 32 of /usr/local/apache/conf/httpd.conf:<br />
Invalid command 'AddModule', perhaps mis-spelled or defined by a module not included in the server configuration.</p>

<p>是否要重新编译apache呢？可我不想重新编译apache，有什么办法吗？谢谢！</p>]]>
    </content>
    <published>2004-12-04T13:57:44Z</published>
    <updated>2004-12-04T13:57:44Z</updated>
  </entry>

  <entry>
    <id>tag:www.thinkjam.org,2004:/zoptuno//2.15-comment:20</id>
    <thr:in-reply-to ref="tag:www.thinkjam.org,2004:/zoptuno//2.15" type="text/html" href="http://www.thinkjam.org/zoptuno/archives/2004/08/linuxaeapachee.html"/>
    <link rel="alternate" type="text/html" href="http://www.thinkjam.org/zoptuno/archives/2004/08/linuxaeapachee.html#c20" />
    <title>Comment from yk on 2005-05-23</title>
    <author>
        <name>yk</name>
<!--         -->
    </author>
    <content type="html" xml:lang="en" xml:base="">
	<![CDATA[<p>在win32平台试了好多次,另外找了好多东西才成功,汗!</p>]]>
    </content>
    <published>2005-05-23T07:01:23Z</published>
    <updated>2005-05-23T07:01:23Z</updated>
  </entry>

  <entry>
    <id>tag:www.thinkjam.org,2004:/zoptuno//2.15-comment:21</id>
    <thr:in-reply-to ref="tag:www.thinkjam.org,2004:/zoptuno//2.15" type="text/html" href="http://www.thinkjam.org/zoptuno/archives/2004/08/linuxaeapachee.html"/>
    <link rel="alternate" type="text/html" href="http://www.thinkjam.org/zoptuno/archives/2004/08/linuxaeapachee.html#c21" />
    <title>Comment from 一为空间 on 2006-01-18</title>
    <author>
        <name>一为空间</name>
<!--        <uri>http://v.tv22.net</uri> -->
    </author>
    <content type="html" xml:lang="en" xml:base="http://v.tv22.net">
	<![CDATA[<p>感谢老大啊，正在找流量控制的文章，哈哈，打包了</p>]]>
    </content>
    <published>2006-01-18T11:57:56Z</published>
    <updated>2006-01-18T11:57:56Z</updated>
  </entry>

  <entry>
    <id>tag:www.thinkjam.org,2004:/zoptuno//2.15-comment:22</id>
    <thr:in-reply-to ref="tag:www.thinkjam.org,2004:/zoptuno//2.15" type="text/html" href="http://www.thinkjam.org/zoptuno/archives/2004/08/linuxaeapachee.html"/>
    <link rel="alternate" type="text/html" href="http://www.thinkjam.org/zoptuno/archives/2004/08/linuxaeapachee.html#c22" />
    <title>Comment from QQ263454883 on 2007-05-22</title>
    <author>
        <name>QQ263454883</name>
<!--        <uri>http://www.syh234.com</uri> -->
    </author>
    <content type="html" xml:lang="en" xml:base="http://www.syh234.com">
	<![CDATA[<p>平民带宽控制哪里有那么复杂呀。<br />
看不懂<br />
我的共享作法就是花300元买那种（好象只有广州市有卖哦）<br />
可以上下行分开控制带宽的路由器，上下行分别设成总带宽的三分之一，于是就达到了保游戏网速，打击高速BT下载，限制各类视频类应用，保证开网页，发邮件，语音聊天，挂QQ等等基本的应用。我不但一根3M的ADSL共享了45户，还帮朋友组了几个大型局域网。都是我帮他们买的这种路由器，还防电信网络尖兵。<br />
全中文界面，不信的可以Q聊263454883远程查看呀。</p>]]>
    </content>
    <published>2007-05-22T06:50:50Z</published>
    <updated>2007-05-22T06:50:50Z</updated>
  </entry>

</feed>
