问题描述
客户端跟服务器端交互时,出现了一个失误的定时设计,造成服务器端10分钟内接收到超过30万次请求,php后端瞬间的压力暴增而崩溃。
目前的解决方案时,由于短时间内的重复请求获取的内容都是相同的,在Nginx层直接将有特殊参数的请求给drop掉,直接返回无结果。
代码如下
shell if ( $query_string ~ 'api=(getpush|remove)') {return 200 ’{'resultStatus':1,'allCount':0,'data':[]}’;break; }
这个解决方案不完善的地方,比如只禁掉90%的请求,或者只在指定时间内生效,不知道有没有同学有没有类似的防攻击解决方案?
问题解答
回答1:可以考虑用一个upstream,设定一个权重,把90%的请求转移到一个dummy的接口上
回答2:fine, 自己来把坑补上
nginx+lua=openresty