一、apache

要使apache服务器做对同一IP地址的连接限制,需要mod_limitipconn来实现。一般需要手动编译。不过模块作者也提供了一些编译好的模块,根据自己的apache版本可以直接使用。
 
1、编译方式:
 
  
  1. tar zxvf mod_limitipconn-0.XX.tar.gz 
  2. cd mod_limitipconn-0.XX 
  3. make apxs=/usr/local/apache/bin/apxs  -----这里要按你自己的路径设置 
  4. make install apxs=/usr/local/apache/bin/apxs -----这里要按你自己的路径设置 
2、rpm安装方式:
直接下载mod_limitipconn-0.xx.rpm
rpm -Uhv mod_limitipconn-0.xx.rpm
然后确认产生的mod_limitipconn.so文件在apache服务器模块目录里。
 
3、编辑httpd.conf文件:
 
   
  1. ExtendedStatus On 
  2. LoadModule limitipconn_module modules/mod_limitipconn.so  
  3. < IfModule mod_limitipconn.c > 
  4.    < Location / >   # 所有虚拟主机的/目录 
  5.           MaxConnPerIP 3     # 每IP只允许3个并发连接 
  6.           NoIPLimit p_w_picpath/*  # 对图片不做IP限制 
  7.     < /Location>   
  8.     < Location /mp3 >  # 所有主机的/mp3目录 
  9.     MaxConnPerIP 1         # 每IP只允许一个连接请求     
  10.     OnlyIPLimit audio/mpeg video    # 该限制只对视频和音频格式的文件 
  11.     < /Location > 
  12. < /IfModule> 
二、nginx
nginx限制ip并发数,也是说限制同一个ip同时连接服务器的数量
 
1、添加limit_zone
这个变量只能在http使用
vi /usr/local/nginx/conf/nginx.conf
limit_zone one $remote_addr 10m;
 
2、添加limit_conn
这个变量可以在http, server, location使用
我只限制一个站点,所以添加到server里面
vi /usr/local/nginx/conf/host/gaojinbo.com.conf
limit_conn   one  10;  #限制一个ip同时有10个连接数
 
3、重启nginx
kill -HUP `cat $path/logs/nginx.pid`
 
 
    
  1. vi /usr/local/nginx/conf/vhosts/down.redocn.com.conf 
  2. limit_zone one $binary_remote_addr 10m; 
  3. server 
  4.   listen 80; 
  5.   server_name down.redocn.com; 
  6.   index index.html index.htm index.php; 
  7.   root /data/www/wwwroot/down; 
  8.   error_page 404 /index.php; 
  9.   # redirect server error pages to the static page /50x.html 
  10.   error_page 500 502 503 504 /50x.html; 
  11.   location = /50x.html { 
  12.     root html; 
  13.   } 
  14.   #Zone limit 
  15.   location / { 
  16.     limit_conn one 1; #限制一个ip有1个连接数 
  17.     limit_rate 20k;  #对每个tcp连接限速,而不是对每个ip连接限速 
  18.   } 
  19.  
  20.   # serve static files 
  21.   location ~ ^/(p_w_picpaths|javascript|js|css|flash|media|static)/ { 
  22.     root /data/www/wwwroot/down; 
  23.     expires 30d; 
  24.   } 
limit_zone,是针对每个IP定义一个存储session状态的容器。这个示例中定义了一个10m的容器,按照32bytes/session,可以处理320000个session。
limit_conn one 1; 限制每个IP只能发起一个并发连接limit_rate 300k; 对每个连接限速300k. 注意,这里是对连接限速,而不是对IP限速。如果一个IP允许两个并发连接,那么这个IP就是限速limit_rate×2。
 
三、iptables
这里介绍三种限制方式
1、限制局域网内每个用户的连接数为50
iptables -I FORWARD -p tcp -m connlimit –connlimit-above 50 -j REJECT
 
2、限制指定局域网用户XXX.XXX.XXX.XXX的连接数为50 (这里的XXX.XXX.XXX.XXX改成大家要限制的用户的IP)
iptables -I FORWARD -p tcp -s XXX.XXX.XXX.XXX -m connlimit –connlimit-above 50 -j REJECT
这里举个例子,比如要限制192.168.1.2这个用户的连接数为50
iptables -I FORWARD -p tcp -s 192.168.1.2 -m connlimit –connlimit-above 50 -j REJECT
 
3、限制除用户XXX.XXX.XXX.XXX以外的IP连接数为50 (也就是除了XXX.XXX.XXX.XXX用户不限制其它的都限)
iptables -I FORWARD -p tcp -s !XXX.XXX.XXX.XXX -m connlimit –connlimit-above 50 -j REJECT
这里也举个例子,比如要除了不限制192.168.1.2外,限制其它所有用户的连接数为50
iptables -I FORWARD -p tcp -s !192.168.1.2 -m connlimit –connlimit-above 50 -j REJECT