客戶端跟伺服器端互動(dòng)時(shí),出現(xiàn)了一個(gè)失誤的定時(shí)設(shè)計(jì),造成伺服器端10分鐘內(nèi)接收到超過30萬次請(qǐng)求,php後端瞬間的壓力暴增而崩潰。
目前的解決方案時(shí),由於短時(shí)間內(nèi)的重複請(qǐng)求所獲取的內(nèi)容都是相同的,在Nginx層直接將有特殊參數(shù)的請(qǐng)求給drop掉,直接回傳無結(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的介面上