В нашей конфигурации Nginx сейчас есть это: -
limit_req_zone $binary_remote_addr zone=two:10m rate=15r/m;
limit_req zone=two burst=5 nodelay;
Теперь мы хотим изменить это так, чтобы это ограничение скорости применялось к определенным IP-адресам, а затем иметь другое ограничение скорости, которое применяется к другим, которое является немного менее строгим.
geo $limited_net {
default 0;
111.222.333.444 1;
}
map $limited_net $addr_to_limit {
0 "";
1 $binary_remote_addr;
}
limit_req_zone $addr_to_limit zone=two:10m rate=15r/m;
geo $less_limited_net {
default 1;
111.222.333.444 0;
}
map $less_limited_net $addr_to_limit {
0 "";
1 $binary_remote_addr;
}
limit_req_zone $addr_to_limit zone=three:10m rate=25r/m;
Таким образом, на трафик с IP 111.222.333.444 будет влиять 1-й более строгий лимит скорости, а не второй менее строгий.
Мы также используем cloudflare и устанавливаем ip-адреса cloudflare в /etc/nginx/cloudflare.conf, как это https://support.cloudflare.com/hc/en-us/articles/200170706-How-do-I-restore-original-visitor-IP-with-Nginx-
Это даст мне то, что я хочу?
Или должно быть больше так?
geo $limited_net {
default 0;
111.222.333.444 1;
}
map $limited_net $addr_to_limit {
0 "";
1 $binary_remote_addr;
}
limit_req_zone $addr_to_limit zone=two:10m rate=15r/m;
limit_req_zone $binary_remote_addr; zone=three:10m rate=25r/m;
Несмотря на то, что это старый вопрос, он может быть актуален для людей, которые столкнутся с ним в будущем:
Вы можете использовать несколько директив limit_req_zone для обработки запросов из разных источников с разной скоростью:
Директив limit_req может быть несколько. Например, следующая конфигурация ограничивает скорость обработки запросов, поступающих с одного IP-адреса, и в то же время скорость обработки запросов виртуальным сервером:
limit_req_zone $binary_remote_addr zone=perip:10m rate=1r/s;
limit_req_zone $server_name zone=perserver:10m rate=10r/s;
server {
...
limit_req zone=perip burst=5 nodelay;
limit_req zone=perserver burst=10;
}
Эти директивы наследуются от предыдущего уровня тогда и только тогда, когда на текущем уровне нет директив limit_req.
http://nginx.org/en/docs/http/ngx_http_limit_req_module.html#limit_req