Ограничение количества соединений.

Прежде всего, с помощью директивы 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;
        }
Обновлено 11 сентября 2018 г.