Центр Диагностики & База Системных Ошибок

Решения для Windows Server, Active Directory, 1С, СУБД, Linux, Cisco, MikroTik и IP-телефонии.

⚠️ Важная информация Все материалы, инструкции, команды и скрипты предоставлены исключительно в ознакомительных целях. Их применение может повлиять на работу операционной системы, баз данных и сетевого оборудования. Перед выполнением действий обязательно создайте резервную копию. При отсутствии необходимой квалификации обратитесь к ИТ-специалистам.
Nginx Error 503: Service Temporarily Unavailable (limiting connections, excess: ... by zone) Linux / DevOps

Nginx 503: limiting connections excess by zone — Настройка limit_conn

Обновлено: 18.08.2026  ·  Официальная база знаний

Веб-сервер отклоняет попытку установления новых параллельных соединений, отдавая клиенту статус 503 Service Temporarily Unavailable. В журнале error.log регистрируется: limiting connections, excess: 10 by zone "addr", client: 203.0.113.19, server: download.example.com.

ДирективаОбъект ограниченияЭффект при срабатывании
limit_conn_zone $binary_remote_addrЧисло одновременных TCP/TLS сессий с 1 IPБлокировка параллельных потоков одного клиента
limit_conn_zone $server_nameСуммарные активные сессии на весь virtual hostЗащита всего сайта от перегрузки пула соединений
limit_conn_statusHTTP-код ответа при сбросеПо умолчанию 503 (рекомендуется 429)
  • Пользователи при использовании многопоточных менеджеров загрузки (IDM, wget в несколько потоков) получают ошибку 503 на части скачиваемых файлов.
  • Браузеры при активной загрузке большого числа медиафайлов по HTTP/1.1 упираются в лимит одновременных соединений.
  1. Проверьте текущие лимиты соединений в блоках конфигурации Nginx:
    grep -rn "limit_conn" /etc/nginx/
  2. Увеличьте допустимое количество одновременных соединений для пользователя в nginx.conf:
    # В блоке http: задаем зону для учета соединений по IP
    limit_conn_zone $binary_remote_addr zone=conn_limit_per_ip:10m;
    
    # В блоке server или location:
    location /downloads/ {
        # Увеличиваем лимит параллельных соединений (например, до 20):
        limit_conn conn_limit_per_ip 20;
        limit_conn_status 429;
    }
  3. Если используется протокол HTTP/2 или HTTP/3, помните о мультиплексировании: все параллельные запросы браузера идут внутри одной TCP-сессии, поэтому лимит limit_conn считает их за 1 соединение только до момента открытия новых сокетов.
  4. Настройте отдельное ограничение скорости скачивания на каждое соединение вместо грубого сброса соединений:
    location /downloads/ {
        limit_conn conn_limit_per_ip 5;
        limit_rate 2m; # Ограничение 2 МБ/сек на каждое соединение
    }
  5. Примените обновленную конфигурацию: sudo nginx -s reload.
Внимание: Соединение учитывается в limit_conn только тогда, когда сервер уже прочитал все заголовки запроса и начал обработку. Для защиты от атак типа Slowloris используйте директивы client_header_timeout и client_body_timeout.
Практический опыт инженера: Не выставляйте `limit_conn` менее 10-15 на клиентский IP, так как современные браузеры стандартно открывают до 6-8 параллельных TCP-сокетов на домен при работе по HTTP/1.1.

Частые вопросы (FAQ)

В чем разница между limit_req и limit_conn?

limit_req ограничивает частоту поступления запросов в единицу времени (rate per second). limit_conn ограничивает количество одновременно открытых и обрабатываемых в данный момент соединений.

Как браузер реагирует на ошибку limit_conn?

Если веб-страница загружает 30 картинок параллельно по HTTP/1.1 при limit_conn 5, часть картинок вернет ошибку 503 и не отобразится на странице.

Считает ли limit_conn соединения в состоянии Keep-Alive?

Соединения в состоянии Keep-Alive (ожидающие новых запросов без активной передачи данных) не учитываются счетчиком активных соединений зоны limit_conn.

Как ограничить суммарное число подключений ко всему сайту?

Создайте зону limit_conn_zone $server_name zone=perserver:10m; и укажите limit_conn perserver 1000; внутри блока server.