Nginx限速

     在WEB开发中经常会遇到接口被刷的情况,如CC攻击,通过有限的ip对服务器发来大量请求,使服务器资源耗尽。使用nginx的ngx_http_limit_req_module 模块和ngx_http_limit_conn_module模块可以对统一ip的请求和连接数进行限制。

1,ngx_http_limit_req_module模块,用来限制连单位时间内连接数的模块,是对一段时间内的连接数限制。设置一块共享内存限制域用来保存键值的状态参数

 语法: 

      limit_req_zone $variable zone=name:size rate=rate; 其中$variable是键,zone是区域名,limit_req会使用,size是内存大小,rate是连接数限制每秒/每分。

      limit_req zone=name [burst=number] [nodelay];设置对应的共享内存限制域和允许被处理的最大请求数阈值。 默认超过请求频率的请求会被延时处理,当超过阀值默认返回503。burst表示前一秒如未达到上线,其余量可以顺延给下一秒。nodelay表示不延时处理

      limit_req_status code 设置拒绝请求的响应状态码,默认不设置为503

举例:

      limit_req_zone $binary_remote_addr zone=addr_gift:10m rate=30r/s;

      limit_req zone=addr_gift nodelay;

      limit_req_status 403;

      统一IP平均处理的请求频率不能超过每秒30次,且不延时执行,超过上限的返回 403。

2,ngx_http_limit_conn_module模块,用来限制单个ip的并发连接数,是对同一时刻的连接数限制。

语法:

      limit_conn_zone $variable zone=name:size;$variable定义键,zone=name定义区域名称,size定义各个键共享内存空间大小。

      limit_conn zone_name number,指定每个给定键值的最大同时连接数,当超过这个数字时默认被返回503。

      limit_conn_status code; 。指定当超过限制时,返回的状态码。默认是503。

举例:

       limit_conn_zone $binary_remote_addr zone=addr_conn:10m; 

       limit_conn addr_conn 50;

       limit_conn_status 403;

       统一IP并发连接数50,超过限制返回403

猜你喜欢

转载自wangjixiang.iteye.com/blog/2301021