当前位置: 首页 > 后端技术 > PHP

秒杀流控执行方案

时间:2023-03-29 23:01:15 PHP

nginx限制连接数(ngx_http_limit_conn_module)模块ngx_http_limit_conn_module针对一些服务器出现流量异常,负载过大,甚至大流量恶意攻击访问等情况,限制并发数;该模块可以根据key来定义每个key值的连接数,只有那些正在处理请求(headers已经被完全读取)的连接才会被统计。本模块使用漏斗算法(LeakyBucket),有TrafficShaping和TrafficPolicing两种处理方式。桶装满水后,常见的两种处理方法是:暂时截断上层水的向下流动,等桶中的水漏掉一部分后,放掉上层水。溢出的塔顶水直接丢弃。该模块提供了limit_conn_zone和limit_conn两个配置参数,其中limit_conn_zone只能配置在http{}段,而limit_conn可以配置在http{}、server{}、location{}段。第三方模块编译安装参数:./configure–prefix=/usr/local/webserver/nginx–add-module=/data0/software/nginx_limit_speed_module-mastermake&&makeinstalllimit_req_zone$binary_remote_addrzone=one:10mrate=1r/s;server{location/search/{limit_reqzone=oneburst=5nodelay;}第一段配置第一个参数:$binary_remote_addr表示remote_addrflag用于限制,“binary_”的目的是简写内存使用,即限制同一个客户端ip地址第二个参数:zone=one:10m表示生成一块大小为10M,名称为one的内存区域,用于存放访问的频率信息第三个参数:rate=1r/s意思是允许同一个识别客户端的访问频率,这里限制为每秒1次。比如第二段30r/m可以配置第一个参数:zone=one来设置limit使用哪个配置区域,和上面的limit_req_zone是一样的。名字对应第二个参数:burst=5,重点解释这个配置,burst突发的意思,这个配置的意思是设置一个大小为5的buffer,当大量请求(突发)过来时,accessfrequencylimitisexceeded请求可以先放在这个缓冲区中。第三个参数:nodelay,如果设置了,当访问频率超过,缓冲区已满时,会直接返回503。如果不设置,所有请求都会排队等候