Techyou labs
真正的爱应该超越生命的长度、心灵的宽度、 灵魂的深度
常用标签

下载模块:http://www.nowhere-land.org/programs/mod_vhost_limit/

安装:

1. apxs -c mod_vhost_limit.c -o /path/to/libexec/mod_vhost_limit.so

在 httpd.conf 加入:

1. LoadModule vhost_limit_module libexec/mod_vhost_limit.so
   2. AddModule mod_vhost_limit.c

配置:

1. MaxClients 150
   2. ExtendedStatus On
   3.  
   4. NameVirtualHost *
   5. <VirtualHost *>
   6.     ServerName server1
   7.     DocumentRoot /some/where/1
   8.     MaxVhostClients 100
   9. </VirtualHost>
  10.  
  11. <VirtualHost *>
  12.     ServerName server2
  13.     DocumentRoot /some/where/2
  14.     MaxVhostClients 30
  15. </VirtualHost>
  16.  
  17. <VirtualHost *>
  18.     ServerName server3
  19.     DocumentRoot /some/where/3
  20. </VirtualHost>

其中:server1 被限制为 100 个并发线程数。server2 被限制为 30 个并发线程数。server3 没有被限制。
注:需 mod_status 的 ExtendedStatus On 支持!!

如超出限制的并发数在客户端就会出现503错误:

Service Temporarily Unavailable
The server is temporarily unable to service your request due to maintenance downtime or capacity problems. Please try again later.
——————————————————————————–
Apache/1.3.27 Server at server1 Port 80

在 error_log 中将会有类似以下的错误提示:

[Mon Jun 23 15:22:24 2003] [error] client access to server1 deferred, MaxVhostClients 100 exceeded

——————————————————————————–

下载

mod_limitipconn.c
http://dominia.org/djao/limit/mod_limitipconn-0.04.tar.gz
http://dominia.org/djao/limit/mod_limitipconn-0.04-1.i386.rpm
(proxy client detection feature not enabled)
http://dominia.org/djao/limit/mod_limitipconn-0.04-1.src.rpm

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

# wget http://dominia.org/djao/limit/mod_limitipconn-0.04.tar.gz

下载到本地,然后执行下面的命令编译安装。我的apache位于/usr/local/apache目录

解压缩:

1. [root@ns chenlf]# tar zxvf mod_limitipconn-0.04.tar.gz
   2. mod_limitipconn-0.04/
   3. mod_limitipconn-0.04/Makefile
   4. mod_limitipconn-0.04/README
   5. mod_limitipconn-0.04/apachesrc.diff
   6. mod_limitipconn-0.04/mod_limitipconn.c
   7. mod_limitipconn-0.04/ChangeLog

编译安装:

   1. [root@ns chenlf]# cd mod_limitipconn-0.04
   2. [root@ns mod_limitipconn-0.04]# ls
   3. apachesrc.diff     ChangeLog     Makefile
   4. mod_limitipconn.c  README
   5. [root@ns mod_limitipconn-0.04]
   6. # /usr/local/apache/bin/apxs -c -i -a mod_limitipconn.c
   7. gcc -DLINUX=22 -I/usr/include/db1 -fpic -DSHARED_MODULE -I
   8. /usr/local/apache/include -c mod_limitipconn.c
   9. gcc -shared -o mod_limitipconn.so mod_limitipconn.o
  10. [activating module `limitipconn' in /usr/local/apache/conf/httpd.conf]
  11. cp mod_limitipconn.so \
  12. /usr/local/apache/libexec/mod_limitipconn.so
  13. chmod 755 /usr/local/apache/libexec/mod_limitipconn.so
  14. cp /usr/local/apache/conf/httpd.conf
  15.     /usr/local/apache/conf/httpd.conf.bak
  16. cp /usr/local/apache/conf/httpd.conf.new
  17.     /usr/local/apache/conf/httpd.conf
  18. rm /usr/local/apache/conf/httpd.conf.new

修改配置文件:

1. 全局控制,在httpd.conf加上以下几行:

1. <IfModule mod_limitipconn.c>
         2.     <Location /> # 所有虚拟主机的/目录
         3.         MaxConnPerIP 3 # 每IP只允许3个并发连接
         4.         NoIPLimit image/* # 对图片不做IP限制
         5.     </Location>
         6.     <Location /mp3> # 所有主机的/mp3目录
         7.         MaxConnPerIP 1 # 每IP只允许一个连接请求
         8.         OnlyIPLimit audio/mpeg video # 该限制只对视频和音频格式的文件
         9.     </Location>
        10. </IfModule>

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

1. <VirtualHost xx.xxx.xx.xx>
         2.     ServerAdmin chenlf@chinalinuxpub.com
         3.     DocumentRoot /home/my
         4.     ServerName www.my.com
         5.     <IfModule mod_limitipconn.c>
         6.         <Location /> # 所有虚拟主机的/目录
         7.             MaxConnPerIP 5 # 每IP只允许3个并发连接
         8.             NoIPLimit image/* # 对图片不做IP限制
         9.         </Location>
        10.         <Location /mp3> # 所有主机的/mp3目录
        11.             MaxConnPerIP 2 # 每IP只允许一个连接请求
        12.             OnlyIPLimit audio/mpeg video # 该限制只对视频和音频格式的文件
        13.         </Location>
        14.     </IfModule>
        15.     ErrorLog /home/my/logs/error_log
        16.     CustomLog /home/my/logs/access_log common
        17. </VirtualHost>

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

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

暂无评论

添加新评论