Назад | Перейти на главную страницу

В Apache есть ли способ ограничить количество новых подключений в секунду / час / день?

Чтобы уточнить, я не хочу ограничивать количество одновременных подключений и не хочу ограничивать количество 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