Board logo

标题: [Nginx] Nginx 限制单个IP的并发连接数及对每个连接速度(限速) [打印本页]

作者: licess    时间: 2011-5-18 14:34     标题: Nginx 限制单个IP的并发连接数及对每个连接速度(限速)

使用Nginx限制单个IP的并发连接数能够减少一些采集程序或者DDOS的攻击。
lnmp的nginx配置中已经添加了部分代码,但是是注释掉的,可以编辑/usr/local/nginx/conf/nginx.conf 文件

1.1.8以上版本的nginx的设置:
查找:
复制内容到剪贴板
代码:
#limit_conn_zone $binary_remote_addr zone=perip:10m;
,将前面的#去掉,没这一行的,话加上
复制内容到剪贴板
代码:
limit_conn_zone $binary_remote_addr zone=perip:10m;
再在要设置限制连接数的虚拟主机配置里的server段里添加上
复制内容到剪贴板
代码:
limit_conn perip 10;
10就是单个IP的最大并发连接数。
复制内容到剪贴板
代码:
limit_rate 100k;
limit_rate为限速为 100KB/秒。
限制每个连接速度为100K,此限制是针对单个线程,比如,我用IE下载是100K,当用迅雷时它会占用2个线程,所以迅雷下载速度为200K,如果单个IP的并发数设置为10,则多线程下载的话速度可以达到100K×10。

最后/usr/local/nginx/sbin/nginx -t 测试配置是否有错误,如没有错误执行:
/usr/local/nginx/sbin/nginx -s reload 重载配置使其生效


####################################################
以下为旧版nginx下的设置:
查找:
复制内容到剪贴板
代码:
#limit_zone  oneip  $binary_remote_addr  10m;
将前面的#去掉,没这一行的,话加上
复制内容到剪贴板
代码:
limit_zone  oneip  $binary_remote_addr  10m;
,再在虚拟主机配置的server段里添加
复制内容到剪贴板
代码:
limit_conn oneip 20;
limit_conn 语句最后面的数字为单个IP的最大并发连接数。

如果是非lnmp安装的也很简单,在nginx.conf里添加上
复制内容到剪贴板
代码:
limit_zone oneip $binary_remote_addr 10m;
limit_conn oneip 20;
当然,limit_conn oneip 20; 语句也是可以添加到server 段里只针对某个虚拟主机做此限制。

限制直接在server段里限制并发数这一行下面加上limit_rate 100k;
限制每个连接速度为100K,此限制是针对单个线程,比如,我用IE下载是100K,当用迅雷时它会占用2个线程,所以迅雷下载速度为200K,如果单个IP的并发数设置为20,则多线程下载的话速度可以达到100K×20。

最后重启nginx即可。
作者: itopidea    时间: 2011-5-18 22:46

学习了,收藏!谢谢李哥分享!
作者: kiah    时间: 2011-5-19 14:45

学习了 嘿嘿 学习了
作者: hamen    时间: 2012-3-16 21:19

limit_conn oneip 20; 这个添加到server段里面nginx启动不了
作者: licess    时间: 2012-3-17 09:38     标题: 回复 4# 的帖子

部分付哦我信息,我没法说
作者: hamen    时间: 2012-3-17 12:41

针对某个虚拟主机server段里面要怎样写?
作者: fineusb    时间: 2012-3-20 23:11

LNAMPA也可以用你可以把改IP的并发数吗
作者: holinhot    时间: 2013-2-21 03:15     标题: 不行啊。

limit_zone  oneip  $binary_remote_addr  10m;

去掉#号用不了。直接提示这一行错误,我的是nginx1.2.5
作者: licess    时间: 2013-2-21 09:22     标题: 回复 8# 的帖子

你不说错误信息,我也没法说
作者: dc10221203    时间: 2013-4-3 10:12     标题: 回复 1# 的帖子

LNAMPA 按照上面方法做 重启lnmpa 出现错误,请测试!
作者: qqab    时间: 2013-4-30 23:03

支持0.7版本吗?
军歌
作者: shenzm    时间: 2013-5-20 22:48

学习了!这个帖子不错!谢谢楼主
作者: lepig    时间: 2013-6-7 22:50     标题: 回复 1# 的帖子

我的Nginx.conf配置文件里是
#limit_zone crawler $binary_remote_addr 10m

直接去掉#号吗?
还是把他改成#limit_zone  oneip  $binary_remote_addr  10m;
作者: ubuntu    时间: 2013-6-17 11:48

学习了,收藏!谢谢李哥分享!
作者: z000a    时间: 2013-12-7 19:12     标题: "limit_zone" directive is not allowed here

提示错误:root@debian:~# /etc/init.d/nginx restartRestarting nginx daemon: nginxnginx: [emerg] "limit_zone" directive is not allowed here in /usr/local/nginx/conf/nginx.conf:11nginx already running.


LNMP一键安装包最新版本1.0,

下面是

nginx.conf前面的 配置代码:



user  www www;worker_processes 1;
error_log  /home/wwwlogs/nginx_error.log
crit;pid        
/usr/local/nginx/logs/nginx.pid;
#Specifies the value for maximum file descriptors that can be opened by this process.
worker_rlimit_nofile 51200;

limit_zone oneip $binary_remote_addr 10m;

events{use epoll;worker_connections 51200;}
作者: licess    时间: 2013-12-9 20:02

nginx版本1.1.8 后limit_zone 在新版本中已经使用limit_conn_zone代替
需要使用限速的虚拟主机里使用limit_conn 限制
limit_zone 替换为limit_conn_zone $binary_remote_addr zone=perip:10m;

server段添加limit_conn perip 10; 10就是限制的数量
作者: bbsfedora    时间: 2014-1-9 17:12

谢谢分享,学习了
作者: leder_gao    时间: 2014-3-25 23:12

那如何测试呢?
作者: reyu123    时间: 2015-9-16 18:10

虚拟主机配置里怎么加啊,,,,军哥能否给个演示!!!
作者: licheng124    时间: 2015-12-10 10:21

怎么设置某些IP 为例外呢  比如我做了CDN
作者: licess    时间: 2015-12-10 13:24     标题: 回复 20# 的帖子

无法设置例外的ip




欢迎光临 VPS侦探论坛 (http://bbs.vpser.net/) Powered by Discuz! 6.0.0