nginx作为基于http body的速率限制器

时间:2017-02-08 18:12:57

标签: nginx nginx-location

我正在评估nginx作为多租户REST API系统的速率限制器。我需要通过tenant-id限制API调用。 例如,我想为tenant1允许100 r / s,对tenant2只允许50 r / s。

当存在诸如“me.com/tenant1/api”和“me.com/tenant2/api”(使用location指令)之类的不同网址时,可以轻松获得。

但是,就我而言,所有租户的网址都是相同的“me.com/api”(我无法改变这一点)。 要查找tenant-id,我需要从请求的Body中提取JSON属性,然后检查DB以获取真实的tenant-id。

是否可以根据我的要求limit_req?

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

我决定构建另一个服务 getTenant 来解析正文并从数据库中提取租户。该服务由Nginx内部调用。 我不确定这是否是最好的nginx(/ openresty)解决方案,但这就是我想出来的:

{{1}}

基本上,当调用 me.com/api 时,会向服务 / getTenant 发出新的子请求。该调用的响应用于构建对 / tenant [X] / doApi 服务的另一个子请求调用。这样我就可以定义每个租户的位置,并为每个租户提供不同的rate_limis。

对此的评论非常受欢迎!