В настоящее время я создаю API и ищу инструмент, который позволил бы мне контролировать (в графическом интерфейсе) и использование ограничения скорости. Я столкнулся с несколькими корпоративными решениями, включая:
План предприятия Apigee - это именно то, что я ищу, но планы Начало по 3000 долларов в месяц, что вне моего ценового диапазона. Все остальные решения либо слишком дороги, либо не обеспечивают то решение, которое я ищу.
Это заставило меня взглянуть на некоторые варианты с открытым исходным кодом, включая:
Лак кажется довольно полным решением; однако мне нужно было бы создать графический интерфейс для визуализации данных.
Мой последний вариант - создать решение с нуля, используя EventMachine и ruby.
Любой совет?
Я думаю, вы переоцениваете, насколько это сложно.
В вашем коде просто есть счетчик с redis / memcached / mongodb (счетчик 1/24 часа или почасовой / ежедневный счетчик в зависимости от ваших потребностей) и возвращайте соответствующую ошибку, когда лимит был достигнут. Вы можете либо увеличить счетчики прямо здесь, либо сделать это асинхронно при обработке журналов.
Чтобы отобразить данные, просто сделайте простую веб-страницу, суммирующую подсчеты по мере необходимости.
Для нашего использования нам не нужно точно ограничивать вещи, поэтому мы обычно просто регистрируемся через нашу инфраструктуру журналов, и один из процессоров журналов (в режиме реального времени через писец) резюмирует такие вещи. Результатом является простая HTML-страница с занятыми IP-адресами / клиентами, некоторая страница, которую nagios может отслеживать, и некоторые URL-адреса, с которых munin извлекает данные для построения графиков.
Ты можешь использовать Naxsi с nginx. просто переопределите ваше / requestDenied местоположение с помощью необходимых вам правил ограничения:
сопоставить параметры перенаправления naxsi до соответствующего лимита:
map $arg_uri $limit_uri {
123.php limit_zone1;
234.php limit_zone2;
default limit_default;
}
ограничения на использование в местоположении:
location /RequestDenied {
proxy_pass http://127.0.0.1:4242;
limit_req $limit_uri;
}