Ответ
NGINX предоставляет несколько типов лимитов для контроля нагрузки, защиты ресурсов и обеспечения безопасности.
1. Ограничение частоты запросов (Rate Limiting) Контролирует количество запросов с одного источника.
limit_req_zone $binary_remote_addr zone=api_limit:10m rate=5r/s;
location /api/ {
limit_req zone=api_limit burst=10 nodelay;
}
2. Ограничение количества соединений (Connection Limiting) Ограничивает число одновременных активных соединений с одного IP или для всего location.
limit_conn_zone $binary_remote_addr zone=addr:10m;
location /download/ {
limit_conn addr 3; # Не более 3 соединений с одного IP
}
3. Ограничение скорости передачи (Bandwidth Limiting) Ограничивает скорость отдачи контента клиенту.
location /large_files/ {
limit_rate 500k; # Ограничение на 500 КБ/с на соединение
limit_rate_after 10m; # Начинать ограничивать после отдачи первых 10 МБ
}
4. Ограничение размера запроса (Request Size Limiting) Защита от переполнения буферов большими телами запросов (например, загрузка файлов).
client_max_body_size 10M; # Глобально или внутри server/location
5. Таймауты (Timeout Limits) Управление временем ожидания для различных фаз соединения.
client_body_timeout 10s; # Таймаут на чтение тела запроса
client_header_timeout 5s; # Таймаут на чтение заголовков
keepalive_timeout 75s; # Таймаут keep-alive соединений
send_timeout 60s; # Таймаут на отправку ответа клиенту
6. Контроль доступа по IP (IP-based Access Control) Базовый фаервол на уровне IP-адресов.
location /admin/ {
allow 192.168.1.0/24;
allow 10.0.0.1;
deny all;
}
Комбинирование: Эти лимиты часто используются вместе. Например, limit_req для защиты API, limit_conn для эндпоинтов загрузки и client_max_body_size для всех upload-операций.