我正在评估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?
感谢您的帮助!
答案 0 :(得分:0)
我决定构建另一个服务 getTenant 来解析正文并从数据库中提取租户。该服务由Nginx内部调用。 我不确定这是否是最好的nginx(/ openresty)解决方案,但这就是我想出来的:
{{1}}
基本上,当调用 me.com/api 时,会向服务 / getTenant 发出新的子请求。该调用的响应用于构建对 / tenant [X] / doApi 服务的另一个子请求调用。这样我就可以定义每个租户的位置,并为每个租户提供不同的rate_limis。
对此的评论非常受欢迎!