设为首页收藏本站

LinuxTone | 运维专家网论坛 - 最棒的Linux运维与开源架构技术交流社区!

 找回密码
 注册

用新浪微博连接

一步搞定

QQ登录

只需一步,快速开始

查看: 8157|回复: 7

[nginx] nginx利用limit模块设置IP并发防CC攻击 [复制链接]

Rank: 7Rank: 7Rank: 7

签到
87
注册时间
2008-7-6
最后登录
2016-5-12
在线时间
43 小时
阅读权限
100
积分
7958
帖子
67
主题
31
精华
2
UID
127
发表于 2012-10-30 11:13:09 |显示全部楼层


nginx利用limit模块设置IP并发防CC攻击 原文来自http://xencdn.net/nginx-limit-conn-how-to/

在nginx.conf 中的http字段下面加入一如下一行
limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s; ##平均 1r/s 每秒1个请求

再在server下配置的主机定义文档中加入如下一行(全局就加在server下面)
limit_req zone=one burst=8;队列模式
limit_req zone=one burst=8 nodelay; ###不用队列 默认的突发(burst是0)

如果只想限制php的请求,加在location下

location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
limit_req zone=one burst=8 nodelay;

重加载nginx即可 nginx -s reload

参考文档1:http://www.howtoforge.com/rate-limiting-with-nginx
参考文档2:http://wiki.nginx.org/NginxHttpLimitReqModule
https://www.opvps.com 虚拟技术应用网

Rank: 8Rank: 8

注册时间
2011-2-23
最后登录
2015-9-28
在线时间
650 小时
阅读权限
90
积分
83677
帖子
376
主题
13
精华
0
UID
12125
发表于 2012-10-30 12:31:39 |显示全部楼层
  1. 再在server下配置的主机定义文档中加入如下一行(全局就加在server下面)
  2. limit_req zone=one burst=8;队列模式
  3. limit_req zone=one burst=8 nodelay; ###不用队列 默认的突发(burst是0)
复制代码
没明白...是加入这两行中的其中一行还是都加入...?
nginx的limit模块真心不会用啊...

使用道具 举报

Rank: 8Rank: 8

注册时间
2009-3-28
最后登录
2017-3-15
在线时间
154 小时
阅读权限
90
积分
28063
帖子
138
主题
7
精华
0
UID
2182
发表于 2012-10-30 14:38:10 |显示全部楼层
学习中。。。。

使用道具 举报

Rank: 9Rank: 9Rank: 9

注册时间
1970-1-1
最后登录
2015-12-2
在线时间
170 小时
阅读权限
200
积分
19977
帖子
119
主题
35
精华
2
UID
9223

LT总司令 LT元老 LT教授

发表于 2012-10-30 16:25:40 |显示全部楼层
mojie126 发表于 2012-10-30 12:31
没明白...是加入这两行中的其中一行还是都加入...?
nginx的limit模块真心不会用啊... ...

你应该是没明白burst的意思。

比如nginx.conf的http段配置如下
  1. limit_req_zone $binary_remote_addr zone=req:20m rate=100r/s;
  2. limit_req zone=req burst=150;
复制代码
“limit_req_zone $binary_remote_addr zone=req:20m rate=100r/s;”
相当于在nginx创建了一个检查站,名字叫req,凡是跟req相关的请求,并限定检查速率是100r/s。
所以当使用“limit_req zone=req
burst=150;”指定某些请求需要经过req的时候,请求的速率就被限制为100r/s。日志验证了这点。

然后就是burst=150了。这相当于在检查站req旁边放150个座位。如果某个请求当时超过速度限制被拦了,请他在空座位上坐着,等排队,如果检查站空了,就可以通过。如果连座位都坐满了,那就抱歉了,请求直接退回,客户端得到一个服务器忙的响应。所以说burst跟request_rate一点关系都没有,设成10000,就是1万个请求可以等着排队,而检查站还是1秒钟放行100个请求(龟速)。而且也不能一直排队,所以nginx还设了超时,排队超过一定时间,也是直接退回,返回服务器忙的响应。

使用道具 举报

Rank: 8Rank: 8

注册时间
2011-2-23
最后登录
2015-9-28
在线时间
650 小时
阅读权限
90
积分
83677
帖子
376
主题
13
精华
0
UID
12125
发表于 2012-10-31 08:58:49 |显示全部楼层
kindle 发表于 2012-10-30 16:25
你应该是没明白burst的意思。

比如nginx.conf的http段配置如下“limit_req_zone $binary_remote_addr zo ...

原来如此,明白了...

谢谢这么详细的解释~~

使用道具 举报

Rank: 6Rank: 6

注册时间
2012-2-24
最后登录
2017-3-16
在线时间
52 小时
阅读权限
70
积分
9760
帖子
11
主题
5
精华
0
UID
18137
发表于 2013-1-1 16:20:52 |显示全部楼层
学习!~

使用道具 举报

Rank: 8Rank: 8

注册时间
2011-9-17
最后登录
2016-7-6
在线时间
61 小时
阅读权限
90
积分
15297
帖子
58
主题
6
精华
0
UID
15656
发表于 2013-1-8 10:36:10 |显示全部楼层
很好,顶!

使用道具 举报

Rank: 4

注册时间
2008-9-18
最后登录
2014-5-16
在线时间
26 小时
阅读权限
50
积分
1600
帖子
27
主题
5
精华
0
UID
300
发表于 2013-8-30 10:51:06 |显示全部楼层
解释得不错

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

IT运维专家网感谢您的支持

合作联系: QQ:67888954/MSN:cnseek@msn.com/mail:netseek@linuxtone.org

Archiver|手机版|感谢所有关心和支持过LinuxTone的朋友们 转载本站内容请注明原作者名及出处 ( 京ICP备08103151 )   |

GMT+8, 2017-3-23 16:15 , Processed in 0.022079 second(s), 11 queries , Apc On.

Powered by Discuz! X2

© 2001-2011 Comsenz Inc.

回顶部