У меня есть веб-сервис, где пользователи загружают файлы, туннелированные через обратные прокси-серверы apache2.
Я использую мод rewrite и флаг P в сочетании с rewrite map.
В основном это выглядит так:
<Location /my-identifier>
RewriteEngine on
RewriteRule /my-identifier/(.*) ${my-rewrite-map:$1} [P]
</Location>
Я знаю, что могу ограничить пропускную способность одного соединения или даже одного IP-адреса на сервер, используя mod_bandwidth или что-то подобное.
Однако я хочу, чтобы ограничение действовало только для определенных пользователей (а именно для тех, кто делает много трафика и превышает объемы добросовестного использования).
Я также хочу, чтобы он распространялся на несколько серверов.
Я могу установить пользовательскую переменную среды, если это поможет (у меня есть полный контроль над URL-адресом, в который я могу его закодировать, и я могу установить его с помощью правила перезаписи)!
В основном то, что я хочу, это, например, чтобы пользователь, достигший своего предела, получил скорость только 5 Мбит / с, независимо от того, сколько соединений он использует или к скольким серверам он подключается.
Это как-то возможно? Модуль есть?
Моя идея была бы централизованным хранилищем данных, куда серверы сообщают о своей статистике трафика по IP. Вероятно, какая-то структура данных RRD. Затем они могут выбрать трафик для IP-адреса за указанный интервал времени (например, за последние 60 секунд) и применить в соответствии с ним коэффициент дросселирования.
Но я действительно не хочу делать все это сам, я мог бы, но это заняло бы у меня месяцы... Я также не привязан к apache. Я также использую серверы Nginx для того же, если есть что-то для Nginx, я могу переключиться на него!