我正在尝试设置 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。