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

Отклонение новых HTTP-запросов при достижении сервером определенной пропускной способности

У меня есть требование запустить 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, прочтите это отличное сообщение от Кайла Брандта