客戶端跟伺服器端互動時,出現了一個失誤的定時設計,造成伺服器端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