nginx限制请求数和连接数来防御cc攻击

  1. 云栖社区>
  2. 博客>
  3. 正文

nginx限制请求数和连接数来防御cc攻击

麦老师 2017-12-16 10:39:26 浏览886 评论0

摘要: 主要通过nginx的http_limit_conn和http_limit_req模块来防御cc攻击。 ngx_http_limit_req_module可以限制单个IP每秒请求数 ngx_http_limit_conn_module可以限制单个IP的连接数 通过限制请求数和连接数能相对有效的防御CC攻击。

主要通过nginx的http_limit_conn和http_limit_req模块来防御cc攻击。

ngx_http_limit_req_module可以限制单个IP每秒请求数

ngx_http_limit_conn_module可以限制单个IP的连接数

通过限制请求数和连接数能相对有效的防御CC攻击。

1、限制每秒请求数

ngx_http_limit_req_module模块指令通过漏桶原理来限制单位时间内的请求数,一旦单位时间内请求数超过限制,就会返回503错误,需要分别在http和server中配置。

例:

http {
limit_req_zone $binary_remote_addr zone=one:10m rate=5r/s;
...
server {
    ...
    location  / {
        limit_req zone=one burst=2 nodelay;
           }
       }
 }


说明:

$binary_remote_addr:表示客户端IP地址
zone=one:10m:漏桶名字为one,并为这个zone分配10M内存用来存储会话(二进制远程地址),1M的内存可以保存约16000个64字节的记录(可以参考官方文档:http://nginx.org/en/docs/http/ngx_http_limit_req_module.html
rate=5r/s:限制频率每秒5个请求
burst=2:允许超过频率限制请求,但是最多不能超过2个,举例一:第一秒请求1个,第二秒也请求1个,那么第三秒是可以请求5个的。举例二:第一秒请求4个,第二秒超过2个请求直接503。
nodelay:超过的请求不延迟处理,设置后4个请求在一秒内处理。

2、限制IP连接数

ngx_http_limit_conn_modul模块和上面的有些相似,使用起来更简单。

例:

http {
limit_conn_zone $binary_remote_addr zone=addr:10m;
...
server {
    ...
    location / {
        limit_conn addr 5;
            }
       }
 }


说明:limit_conn addr 5;限制同一时间内只允许5个连接,超出的返回503
【云栖快讯】阿里巴巴小程序繁星计划,20亿补贴第一弹云应用免费申请,限量从速!  详情请点击

网友评论