%3F.png)
У меня есть веб-сайт, обслуживаемый Apache 2.4 с PHP-FPM. Генерация некоторых страниц занимает несколько секунд. Время от времени какой-нибудь бот или краулер пытается загрузить много таких страниц одновременно, для всех запросов запускаются процессы PHP, и сервер становится очень медленным, потому что у него заканчивается память.
Я могу ограничить количество процессов PHP или количество одновременных подключений (и даже количество одновременных подключений с одного IP-адреса с помощью mod_qos), но тогда последующие запросы (или, по крайней мере, последующие запросы с этого IP-адреса) немедленно получат результат 503. Возможно ли сохранить избыточные запросы в бэклоге и обрабатывать их после завершения предыдущих запросов?
решение1
Установите Nginx в качестве обратного прокси-сервера и примените ограничение скорости, как указано в этом руководстве:https://www.nginx.com/blog/rate-limiting-nginx/
Я не хочу копировать все функции, изображенные на этой странице, их много, и вам лучше прочитать это самостоятельно. Это официальная страница блога, так что вряд ли она пойдет.