У меня есть требование запустить HTTP-сервер, который отклоняет новые HTTP-запросы (с кодом 503 или аналогичным), когда глобальная скорость передачи текущих HTTP-ответов превышает определенный уровень. Например, если веб-сервер передает данные со скоростью 98 Мбит / с и поступает новый HTTP-запрос, мы хотели бы отклонить его (поскольку мы не можем гарантировать хорошую скорость).
Я посмотрел на mod_cband для Apache, limit_req для nginx и функции ограничения скорости lighttpd, но ни один из них, похоже, не обрабатывает мой (скорее надуманный, предоставленный) вариант использования.
Я должен добавить, что я открыт для использования практически любого веб-сервера, и я открыт для реализации этого в правилах iptables, если кто-то сможет создать такое правило! (Отказ от TCP-соединения - это нормально, он не должен отвечать HTTP 503).
Какие-либо предложения?
Скрипт учета iptables, который записывает в файл при слишком высокой пропускной способности. Правило mod_rewrite, которое читает карту с помощью rewritemap, файл карты будет содержать
заблокировано заблокировано
(требуются левая и правая стороны)
В вашем контейнере <VirtualHost>:
RewriteMap blockmap txt:/path/to/file/map.txt
В вашем .htaccess (или <VirtualHost>)
RewriteEngine on
RewriteCond ${blockmap:blocked|NOTFOUND} ^blocked$
RewriteRule .* http://www.google.com/ [R=301,L]
Вместо перенаправления дайте им страницу вернуться позже, обработайте ее как ошибку 503 и т. Д.
Для этого вы можете настроить Haproxy перед вашим Apache. Чтобы настроить ограничение скорости в Haproxy, прочтите это отличное сообщение от Кайла Брандта