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