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