Как настроить Nginx для ограничения скорости передачи данных (rate limiting)?

Пользователь

от elias_steuber , в категории: Компьютерные технологии , год назад

Как настроить Nginx для ограничения скорости передачи данных (rate limiting)?

Facebook Vk Ok Twitter Telegram Whatsapp

1 ответ

Пользователь

от meagan_kassulke , год назад

@elias_steuber 

Для ограничения скорости передачи данных в Nginx необходимо использовать модуль ngx_http_limit_conn_module и/или ngx_http_limit_req_module. Эти два модуля различаются по тому, как они ограничивают доступ к ресурсам.


ngx_http_limit_conn_module ограничивает количество подключений к серверу за определенный промежуток времени. Например, можно ограничить количество подключений до 10 за 1 минуту. Для этого можно использовать следующую директиву:

1
2
3
4
5
6
7
8
9
http {
  limit_conn_zone $binary_remote_addr zone=addr:10m;
  server {
    location / {
      limit_conn addr 10;
      ...
    }
  }
}


Здесь мы создаем зону «addr» и ограничиваем количество подключений с IP-адреса до 10 в каждый момент времени.


ngx_http_limit_req_module ограничивает количество запросов к серверу за определенный промежуток времени. Например, можно ограничить количество запросов до 100 за 1 минуту. Для этого можно использовать следующую директиву:

1
2
3
4
5
6
7
8
9
http {
  limit_req_zone $binary_remote_addr zone=one:10m rate=10r/s;
  server {
    location / {
      limit_req zone=one burst=20 nodelay;
      ...
    }
  }
}


Здесь мы создаем зону «one» и устанавливаем частоту ограничения в 10 запросов в секунду, а также максимальный размер буфера в 20 запросов. Также мы указываем параметр nodelay, который позволяет серверу отклонять запросы сверх ограничений, а не откладывать их для обработки в будущем.


Оба этих модуля могут использоваться одновременно для решения различных задач по ограничению скорости передачи данных в Nginx.