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

时间:2016-09-14 13:54:06

标签: nginx

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

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

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

您可以将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=votes:10m指定创建一个名为“votes”的共享内存区域,用于存储访问速率限制URL的IP地址日志。我们设置rate=1r/s以指定每秒只允许从此IP提供一个请求。 burst参数告诉Nginx如果从特定IP排队超过5个,则开始丢弃请求。我放置的正则表达式([0-9])可以替换为与您的路线匹配的任何正则表达式。

有关限制请求率的详情,请参阅this博文。