На моем CentOS VPS установлено приложение PHP Laravel. Это серверная часть моего мобильного приложения, которое недавно было обновлено. К сожалению, я написал плохой код, в результате которого запрос состоит из сотен, может быть, тысяч слов.
Мой сервер apache выходит из строя очень часто (минимум 1 раз в час), и мне нужно запустить: service httpd restart.
Как я вижу в error.log, таких записей много:
(36)File name too long: Cannot map GET /adminpanel/public/api/v2/categoriese=c3Jr...
Десятки запросов в секунду, и apache не работает.
Я опубликовал обновление для магазинов приложений, но у некоторых пользователей все еще есть старая версия. Есть ли возможность заблокировать эти запросы до того, как они будут обработаны?
Apache имеет встроенный лимит по умолчанию 8190 для Директива LimitRequestLine, который регулирует максимальную длину HTTP-запроса GET. Как уже упоминалось, посмотрите, поможет ли изменение этого параметра вашей работе.
Что касается apache, отключающегося каждый час или чаще: я был бы удивлен, что это связано с отклонением слишком длинного запроса GET. Apache тщательно разработан, чтобы отбрасывать нерегулярные запросы с минимальными усилиями, именно во избежание отказа в обслуживании и исчерпания ресурсов.
Судя по тому, что вы опубликовали, это может быть связано с типом используемых вами многопроцессорных модулей (MPM), соотношением минимальных / максимальных разветвленных процессов и доступных системных ресурсов и, конечно же, вычислительной мощностью, которую ваш успешный запрос использует на бэкэнд (PHP).
В качестве временного обходного пути вы можете установить LimitRequestLine параметр к чему-то длинному.