Apache KeepAliveTimeout
существует для закрытия соединения keep-alive, если новый запрос не выдан в течение определенного периода времени. При условии, что пользователь не закрывает свой браузер / вкладку, этот тайм-аут (обычно 5-15 секунд) является тем, что в конечном итоге закрывает большинство поддерживаемых соединений и предотвращает потерю ресурсов сервера из-за неограниченного удержания соединений.
Теперь MaxKeepAliveRequests
директива накладывает ограничение на количество HTTP-запросов, которые KeepAlive
будут обслуживать одно TCP-соединение (оставленное открытым из-за ). Установка этого значения 0
означает, что разрешено неограниченное количество запросов.
Почему вы когда-либо устанавливаете это на что-либо, кроме «неограниченного»? При условии, что клиент все еще активно отправляет запросы, какой вред может допускать их при одном и том же соединении keep-alive? Как только предел достигнут, запросы все еще приходят, только на новом соединении.
Как я вижу, нет смысла ограничивать это. Что мне не хватает?
источник
Частично, чтобы один пользователь не использовал все слоты для подключения. Без ограничения один злонамеренный или плохо написанный клиент может захватить каждое доступное соединение и удерживать его навсегда. Это, однако, не является хорошим решением по сравнению с чем-то вроде предела для каждого IP-соединения.
В основном балансировка нагрузки, но особенно в отношении обслуживания. Если вы хотите перевести сервер в автономный режим, вы отбросите его до 0 соединений, но позволите существующим соединениям завершиться в течение некоторого времени. Установка ограничения на количество запросов keepalive означает, что в конечном итоге пользователи будут корректно создавать новое соединение и перемещаться на новый внутренний сервер. Возможно, какой-то способ сообщить серверу о том, что он вообще должен прекратить принимать сообщения поддержки активности во время процесса утечки, был бы еще лучше, но, насколько я знаю, такой функции не существует.
источник