Какие виды лимитов можно настроить в NGINX?

«Какие виды лимитов можно настроить в NGINX?» — вопрос из категории Веб-серверы и балансировка, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

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-операций.