客戶端跟服務(wù)器端交互時,出現(xiàn)了一個失誤的定時設(shè)計,造成服務(wù)器端10分鐘內(nèi)接收到超過30萬次請求,php后端瞬間的壓力暴增而崩潰。
目前的解決方案時,由于短時間內(nèi)的重復(fù)請求獲取的內(nèi)容都是相同的,在Nginx層直接將有特殊參數(shù)的請求給drop掉,直接返回?zé)o結(jié)果。
代碼如下
shell
if ( $query_string ~ "api=(getpush|remove)") { return 200 '{"resultStatus":1,"allCount":0,"data":[]}'; break; }
這個解決方案不完善的地方,比如只禁掉90%的請求,或者只在指定時間內(nèi)生效,不知道有沒有同學(xué)有沒有類似的防攻擊解決方案?
可以考慮用一個upstream,設(shè)定一個權(quán)重,把90%的請求轉(zhuǎn)移到一個dummy的接口上