X-Forwarded-For中每个最终用户IP地址的WSO2自定义限制策略

X-Forwarded-For中每个最终用户IP地址的WSO2自定义限制策略,wso2,throttling,api-gateway,rate-limiting,Wso2,Throttling,Api Gateway,Rate Limiting,我使用WSO2 API Managet 2.6.0作为Spring Boot REST API前面的API网关 我想添加一个自定义限制策略,以设置每个最终用户ip地址的速率限制,该限制由面向internet的WAF放入请求头X-Forwarded-For WSO2文档显示了一些用Siddhi语言编写的自定义策略示例,但没有足够的示例 我能找到的最详细的艺术是,它展示了一个通过用户ID限制速率的例子 FROM RequestStream SELECT userId, userId as throt

我使用WSO2 API Managet 2.6.0作为Spring Boot REST API前面的API网关

我想添加一个自定义限制策略,以设置每个最终用户ip地址的速率限制,该限制由面向internet的WAF放入请求头
X-Forwarded-For

WSO2文档显示了一些用Siddhi语言编写的自定义策略示例,但没有足够的示例

我能找到的最详细的艺术是,它展示了一个通过用户ID限制速率的例子

FROM RequestStream
SELECT userId, userId as throttleKey
INSERT INTO EligibilityStream;
​
FROM EligibilityStream#throttler:timeBatch(1 min)
SELECT throttleKey, (count(userId) >= 5) as isThrottled, expiryTimeStamp group by throttleKey
INSERT ALL EVENTS into ResultStream;
上面的Siddhi查询告诉WSO2从请求中提取
userId
,并将其用作throttleKey,并将每个throttleKey限制为每1分钟少于5个事务


我想知道如何修改此Siddhi查询以使用请求标头
X-Forwarded-For
中的ip地址,而不是
userId

如果要为特定标头或特定ip创建限制策略,可以使用高级限制策略配置().

如果要为特定标头或特定IP创建限制策略,可以使用高级限制策略配置()。

谢谢,但高级策略仅允许我对特定IP值执行速率限制。在这种情况下,我希望速率限制应用于每个传入用户ipI。在您的情况下,添加标题条件是不够的?标题条件还要求我输入标题名称和参数值。但是我不想限制一个特定的参数值,而是希望对每个传入的参数值动态应用速率限制。您可以使用类似于(.*)的正则表达式来匹配所有参数。为此,您需要在/repository/conf/api manager.xml中启用
true
,让我们用一个例子来讨论这个问题。如果我使用头条件设置每分钟1000个请求的规则,例如
头名称:X-Forwarded-For,参数值:.*?
,这意味着该规则将共享头为
X-forward-For=
的任何请求,这意味着如果我有不同的2000个用户同时使用我的应用程序,他们中有一半会得到配额,对吗?相反,我希望规则能够阻止每个用户,以防他/她是黑客并以每分钟超过1000次的请求攻击我的API,而其他人仍然可以使用该应用。谢谢,但高级策略只允许我对特定的ip值进行速率限制。在这种情况下,我希望速率限制应用于每个传入用户ipI。在您的情况下,添加标题条件是不够的?标题条件还要求我输入标题名称和参数值。但是我不想限制一个特定的参数值,而是希望对每个传入的参数值动态应用速率限制。您可以使用类似于(.*)的正则表达式来匹配所有参数。为此,您需要在/repository/conf/api manager.xml中启用
true
,让我们用一个例子来讨论这个问题。如果我使用头条件设置每分钟1000个请求的规则,例如
头名称:X-Forwarded-For,参数值:.*?
,这意味着该规则将共享头为
X-forward-For=
的任何请求,这意味着如果我有不同的2000个用户同时使用我的应用程序,他们中有一半会得到配额,对吗?相反,我希望规则能够阻止每个用户,以防他/她是黑客,并以每分钟超过1000个请求攻击我的API,而其他人仍然可以使用该应用程序。