%3F.png)
Ich habe eine Website, die von Apache 2.4 mit PHP-FPM bereitgestellt wird. Die Generierung einiger Seiten dauert einige Sekunden. Von Zeit zu Zeit versucht ein Bot oder Crawler, viele dieser Seiten auf einmal herunterzuladen. Für alle Anfragen werden PHP-Prozesse gestartet und der Server wird sehr langsam, weil ihm der Arbeitsspeicher ausgeht.
Ich kann die Anzahl der PHP-Prozesse oder die Anzahl gleichzeitiger Verbindungen (und sogar die Anzahl gleichzeitiger Verbindungen von einer einzelnen IP mit mod_qos) begrenzen, aber dann führen weitere Anfragen (oder zumindest weitere Anfragen von dieser IP) sofort zu einem 503-Ergebnis. Ist es möglich, die überzähligen Anfragen in einem Backlog zu behalten und sie zu verarbeiten, wenn die vorherigen Anfragen abgeschlossen sind?
Antwort1
Installieren Sie Nginx als Reverse-Proxy und wenden Sie dort die Ratenbegrenzung gemäß diesem Handbuch an:https://www.nginx.com/blog/rate-limiting-nginx/
Ich möchte nicht alle auf dieser Seite dargestellten Funktionen kopieren, es gibt viele und Sie sollten das besser selbst lesen. Das ist die offizielle Blog-Seite, also ist es unwahrscheinlich, dass sie verschwindet.