首页 > 系统管理 > Nginx 限速模块使用
2018
06-08

Nginx 限速模块使用

  nginx 可以通过Limit Requests模块Limit Conn模块块来限制同一IP在同一时间段的访问次数,这种方式可以有效的防止CC攻击。也可以使用Geo模块针对某一特定IP(不)加限制。

一、Limit Requests模块

  • 1.1、限制一 IP 来源单位时间内连接总数,采用的是漏桶算法

  • 1.2、nginx.conf配置。

#限制同一ip访问次数
limit_req_zone $binary_remote_addr zone=addr:10m rate=1r/s;    # $binary_remote_addr,二进制格式的客户端地址,使用它代替$remote_addr变量可以将每条状态记录的大小减少到64个字节。
                                                               # zone=addr:10m, 设置10M的共享内存来保存键值($binary_remote_addr)的状态,名为"addr"。
                                                               # rate=1r/s ,限制1秒钟1个请求,其它如:一分钟10个请求(rate=10r/m)。
server {
    listen       80;
    server_name  localhost;
 
    location / {
        limit_req zone=addr;                    #配置1,
       #limit_req zone=addr burst=5 nodelay;    #配置2,burst=5:表示允许超过限制的请求数不多于5个,nodelay:超过的请求不会被延迟处理,直接返回503。
       #limit_req_status 429;                   #默认拒绝的请求,会返回状态码503,针对我们的业务会有大量报警,nginx 1.3.15版本以上支持自定义状态码(线上nginx大多支持)。
        root   html;
        index  index.html index.htm;
     }
  }

  • 1.3、使用siege进行测试。(  模拟单个用户重复请求100次: siege -c1 -r100 141.201.8.131  -b    )

  • 1.4、观察nginx日志结果。(  tail access.log -f | grep '200'  )

                  A:1.2中配置1结果,每秒只会接受来自 123.59.116.228的一个请求

blob.png

二、Geo模块

  • 2.1、可以用来设置黑(白)名单ip,对名单内的ip加(不加)限制。

  • 2.2、nginx.conf配置。

#白名单
geo $limited{       #定义从指定的变量获取客户端的IP地址。默认情况下,nginx从$remote_addr变量取得客户端IP地址
    default 1;
    123.59.116.228 0;     
}
 
map $limited $limit {
    1 $binary_remote_addr; 
    0 "";                   #为0表示不会被下面规则限制(白名单),黑名单的时候反过来设置0和1就可以了。
}
 
#限制同一ip访问次数
limit_req_zone $limit zone=addr:10m rate=1r/s;
 
server {
    listen       80;
    server_name  localhost;
 
    location / {
        limit_req zone=addr burst=5 nodelay;
        root   html;
        index  index.html index.htm;
    }
}

  • 3.3、同样使用siege进行测试。(模拟单个用户重复请求100次: siege -c1 -r100 141.201.8.131 -b    )

  • 3.4、查看日志发现所有的请求都返回状态码200,没有受到访问次数的限制。(  cat access.log | grep 200 | wc -l,结果为100)




最后编辑:
作者:tshare365
这个作者貌似有点懒,什么都没有留下。
捐 赠您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请狠狠点击

留下一个回复