我目前正在构建一个 API,正在寻找一个工具来允许我监控(在 GUI 中)和限制使用速率。我遇到了一些企业解决方案,包括:
Apigee 企业计划正是我想要的,但是计划开始每月 3000 美元,超出了我的承受范围。其他解决方案要么太贵,要么不能提供我想要的解决方案。
这让我考虑了一些开源选项,包括:
Varnish 似乎是一个相当完整的解决方案;但是,我需要构建一个 GUI 来可视化数据。
我的最终选择是使用 EventMachine 和 ruby 从头开始构建解决方案。
有什么建议吗?
答案1
我认为你高估了这件事的难度。
在您的代码中,只需使用 redis/memcached/mongodb 计数器(根据您的需要,可以是 1/24 小时计数器或每小时/每日计数器),并在达到限制时返回相应的错误。您可以立即增加计数,也可以在处理日志时异步执行此操作。
为了显示数据,只需制作一个简单的网页,根据需要汇总计数。
对于我们的使用,我们不需要精确地限制事物,因此我们通常只需通过我们的日志基础设施进行记录,其中一个(通过 scribe 实时)日志处理器将总结这类事情。输出是一个简单的 HTML 页面,其中包含繁忙的 IP/客户端、nagios 可以监控的一些页面以及 munin 从中提取数据以制作图表的一些 URL。
答案2
您可以使用纳克西使用 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;
}