Ограничение количества соединений.
Прежде всего, с помощью директивы limit_conn_zone в секции http следует определить ключ, имя и набор параметров зоны разделяемой памяти для хранения состояний значений ключа:
limit_conn_zone $binary_remote_addr zone=conn_limit_per_ip:10m;
Далее, с помощью директивы limit_conn в контексте location следует указать имя зоны разделяемой памяти и максимально допустимое количество соединений для одного значения ключа:
location /download/ {
limit_conn conn_limit_per_ip 5;
}
Ограничение количества запросов за единицу времени.
С помощью директивы limit_req_zone в секции http следует определить ключ, имя и набор параметров зоны разделяемой памяти для хранения состояний значений ключа:
limit_req_zone $binary_remote_addr zone=req_limit_per_ip:10m rate=5r/s;
После этого, используя директиву limit_req в контексте location следует указать имя зоны разделяемой памяти и максимальный размер всплеска запросов:
location /download/ {
limit_req zone=req_limit_per_ip burst=10;
}
Ограничение скорости передачи ответа клиенту.
В директиве limit_rate в секции location можно задать скорость передачи ответа клиенту (в байтах за секунду) на один запрос (это значит, что при использовании клиентом двух соединений скорость будет вдвое больше ограничения):
location /download/ {
limit_rate 50k;
}
Также возможно использование директивы limit_rate_after, которая задает объем данных, после которого вступит в силу ограничение скорости передачи ответа клиенту:
location /download/ {
limit_rate_after 1m;
limit_rate 50k;
}