Как настроить Nginx для ограничения скорости передачи данных (rate limiting)?
@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.