nginx-限制包含变量的URL的请求速率

nginx-限制包含变量的URL的请求速率,nginx,Nginx,我发现它可以用来限制每次请求的最大数量。但在我看来,这适用于整个虚拟位置。我想要的是限制每个任意URL的速率 例如: 我希望在客户端发出一个请求后,针对特定客户端阻止对/api/list/1/投票的请求30秒。但是,他仍然可以调用/api/list/2/voces(但是在调用之后,/2路线也会被阻塞几秒钟)。 我最初的想法是使用正则表达式为每个以/voces结尾的路线定义一个位置,但是(在示例中)/1和/2将被阻止,这不是我想要的 有什么想法吗?您可以将nginx配置设置为类似以下内容 limi

我发现它可以用来限制每次请求的最大数量。但在我看来,这适用于整个虚拟位置。我想要的是限制每个任意URL的速率

例如: 我希望在客户端发出一个请求后,针对特定客户端阻止对
/api/list/1/投票的请求30秒。但是,他仍然可以调用
/api/list/2/voces
(但是在调用之后,
/2
路线也会被阻塞几秒钟)。 我最初的想法是使用正则表达式为每个以
/voces
结尾的路线定义一个位置,但是(在示例中)
/1
/2
将被阻止,这不是我想要的


有什么想法吗?

您可以将nginx配置设置为类似以下内容

limit_req_zone $binary_remote_addr zone=votes:10m rate=1r/s;

location ~* ^/api/list/([0-9])/votes$ {
    # apply rate limiting
    limit_req zone=votes burst=5;
}
zone=voces:10m
指定创建一个名为“voces”的共享内存区域,以存储访问速率受限URL的IP地址日志。我们设置
rate=1r/s
以指定每秒只允许从该IP服务一个请求。burst参数告诉Nginx,如果来自特定IP的队列超过5个,则开始丢弃请求。我放置的正则表达式([0-9])
可以替换为与您的路线匹配的任何正则表达式


有关限制请求速率的更多信息,请参阅博客文章。

您可以将nginx配置设置为如下所示

limit_req_zone $binary_remote_addr zone=votes:10m rate=1r/s;

location ~* ^/api/list/([0-9])/votes$ {
    # apply rate limiting
    limit_req zone=votes burst=5;
}
zone=voces:10m
指定创建一个名为“voces”的共享内存区域,以存储访问速率受限URL的IP地址日志。我们设置
rate=1r/s
以指定每秒只允许从该IP服务一个请求。burst参数告诉Nginx,如果来自特定IP的队列超过5个,则开始丢弃请求。我放置的正则表达式([0-9])可以替换为与您的路线匹配的任何正则表达式


有关限制请求速率的更多信息,请参阅博客文章。

您可以链接位置块。我认为这不是一个选项,因为潜在路由的数量是无限的,因为id(上例中的1和2)是一个变量。您可以链接位置块。我不认为这是一个选项,因为潜在路由的数量是无限的,由于id(上例中的1和2)是一个变量。这不会阻止来自客户端的所有与该正则表达式匹配的请求吗?参考上面的示例,我认为您的解决方案也会在调用
/api/list/2/voces
后阻止对
/api/list/1/voces
的请求。这不会阻止来自客户端的所有与该正则表达式匹配的请求吗?参考上面的示例,我认为您的解决方案也会在调用
/api/list/2/voces
后阻止对
/api/list/1/voces
的请求。