Nginx:我可以使用 IP + URI 的密钥设置 limit_req_zone 吗?

Nginx:我可以使用 IP + URI 的密钥设置 limit_req_zone 吗?

我正在尝试设置 Nginxlimit_req 模块限制任意IP对同一个URL的请求率。

我想用limit_req_zone由客户端 IP 和请求 URI 组合而成的密钥来定义。也就是说,不要这样:

limit_req_zone $binary_remote_addr zone=req_dev:10m rate=2r/s;

像这样:

set $ip_url "$binary_remote_addr$request_uri"
limit_req_zone $ip_url zone=req_dev:10m rate=2r/s;

但这是行不通的,因为set无法在上下文中调用http

nginx: [emerg] "set" directive is not allowed here in /etc/nginx/nginx.conf:47

有什么方法可以实现这个吗?

需要说明的是:我不想限制特定 URL 的速率。我想避免 IP 每秒访问同一 URL 两次以上。

答案1

您可以将键设置为您想要的任何值limit_req_zone

limit_req_zone "$binary_remote_addr$request_uri" zone=req_dev:10m rate=2r/s;

请注意,这至少需要 nginx 1.7.6。

相关内容