一、apache
要使apache服务器做对同一IP地址的连接限制,需要mod_limitipconn来实现。一般需要手动编译。不过模块作者也提供了一些编译好的模块,根据自己的apache版本可以直接使用。
1、编译方式:
- tar zxvf mod_limitipconn-0.XX.tar.gz
- cd mod_limitipconn-0.XX
- make apxs=/usr/local/apache/bin/apxs -----这里要按你自己的路径设置
- 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文件:
- ExtendedStatus On
- LoadModule limitipconn_module modules/mod_limitipconn.so
- < IfModule mod_limitipconn.c >
- < Location / > # 所有虚拟主机的/目录
- MaxConnPerIP 3 # 每IP只允许3个并发连接
- NoIPLimit p_w_picpath/* # 对图片不做IP限制
- < /Location>
- < Location /mp3 > # 所有主机的/mp3目录
- MaxConnPerIP 1 # 每IP只允许一个连接请求
- OnlyIPLimit audio/mpeg video # 该限制只对视频和音频格式的文件
- < /Location >
- < /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`
- vi /usr/local/nginx/conf/vhosts/down.redocn.com.conf
- limit_zone one $binary_remote_addr 10m;
- server
- {
- listen 80;
- server_name down.redocn.com;
- index index.html index.htm index.php;
- root /data/www/wwwroot/down;
- error_page 404 /index.php;
- # redirect server error pages to the static page /50x.html
- error_page 500 502 503 504 /50x.html;
- location = /50x.html {
- root html;
- }
- #Zone limit
- location / {
- limit_conn one 1; #限制一个ip有1个连接数
- limit_rate 20k; #对每个tcp连接限速,而不是对每个ip连接限速
- }
- # serve static files
- location ~ ^/(p_w_picpaths|javascript|js|css|flash|media|static)/ {
- root /data/www/wwwroot/down;
- expires 30d;
- }
- }
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
转载于:https://blog.51cto.com/johnsteven/818209