Чтобы уточнить, я не хочу ограничивать количество одновременных подключений и не хочу ограничивать количество HTTP-запросов. Я хочу только ограничить количество НОВЫХ подключений на IP.
Я хочу сделать это, потому что у большинства поисковых роботов нет функции проверки активности, и поэтому они открывают новое соединение для каждого запроса.
Я смутно помню, как читал о моде, который мог это сделать, но не могу вспомнить название. Надеюсь, кто-нибудь здесь сможет мне помочь.
Я бы не стал делать это в apache .. Я бы сделал это на сетевом уровне с помощью iptables.
iptables -A INPUT -p tcp --dport 80 -i eth0 -m state --state NEW -m recent --set
iptables -A INPUT -p tcp --dport 80 -i eth0 -m state --state NEW -m recent --update --seconds 86400 --hitcount 100 -j REJECT
Измените 86400 на количество секунд, в течение которых вы хотите сохранить блок (86400 - 1 день), а 100 - это количество обращений, то есть сколько вы готовы разрешить для каждого IP-адреса.
Вы также можете изменить -j REJECT
к -j DROP
, который определяет поведение пакета при выполнении условия. DROP
беспрепятственно отбрасывает пакеты и REJECT
возвращает «порт недоступен» или аналогичную ошибку.
Тем не менее, была mod_throttle
это сделало бы что-то подобное, но я не могу найти много информации об этом. Я думаю, что лучше делать такие вещи на уровне сети / ядра, чем в Apache. Apache хорошо обслуживает запросы. Позвольте ему делать то, что у него лучше всего, и не обременяйте его отслеживанием соединений.
вы можете настроить правило iptables так, чтобы запросы сверх лимита перенаправлялись на другой порт (например, TCP 8080), где другой экземпляр Apache обслуживает статическую страницу с вашим сообщением для пользователей
Я думаю ты ищешь mod_qos