Als der Client mit dem Server interagierte, kam es zu einem Timing-Designfehler, der dazu führte, dass der Server innerhalb von 10 Minuten mehr als 300.000 Anfragen empfing. Der Druck auf das PHP-Backend stieg sofort an und führte zum Zusammenbruch.
Da in der aktuellen Lösung wiederholte Anfragen innerhalb kurzer Zeit denselben Inhalt erhalten, werden Anfragen mit speziellen Parametern direkt auf der Nginx-Ebene abgelegt und es werden keine Ergebnisse direkt zurückgegeben.
Der Code lautet wie folgt
shell
if ( $query_string ~ "api=(getpush|remove)") { return 200 '{"resultStatus":1,"allCount":0,"data":[]}'; break; }
Diese Lösung weist Mängel auf, z. B. dass sie nur 90 % der Anfragen verbietet oder nur innerhalb einer bestimmten Zeit wirksam wird. Ich frage mich, ob irgendwelche Studenten ähnliche Anti-Angriffs-Lösungen haben?
可以考虑用一个upstream,设定一个权重,把90%的请求转移到一个dummy的接口上
fine, 自己来把坑补上
nginx+lua=openresty