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

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

⚠️ Важная информация Все материалы, инструкции, команды и скрипты предоставлены исключительно в ознакомительных целях. Их применение может повлиять на работу операционной системы, баз данных и сетевого оборудования. Перед выполнением действий обязательно создайте резервную копию. При отсутствии необходимой квалификации обратитесь к ИТ-специалистам.
Nginx Error: could not build server_names_hash_max_size (hash bucket size too small) Linux / DevOps

Nginx: could not build server_names_hash_max_size — Решение

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

При проверке конфигурации (nginx -t) или запуске службы Nginx аварийно останавливается с ошибкой хеш-таблиц: could not build server_names_hash_max_size, you should increase server_names_hash_bucket_size: 64 или could not build optimal server_names_hash.

Параметр хешаЗначение по умолчаниюНазначение
server_names_hash_bucket_size32, 64 или 128 байтРазмер одной ячейки (корзины) хеш-таблицы (привязан к размеру L1 Cache Line CPU)
server_names_hash_max_size512Максимальный суммарный размер хеш-таблицы имен виртуальных хостов
Длина доменного имениПревышает размер bucketДлинные домены (более 32-64 символов) не помещаются в ячейку
  • Nginx отказывается применять конфигурацию и не может запуститься (Job for nginx.service failed).
  • Сбой происходит после добавления множества новых поддоменов или доменных имен большой длины.
  1. Откройте глобальный файл конфигурации /etc/nginx/nginx.conf.
  2. Внутри блока http найдите или добавьте директивы настройки хеш-таблиц доменных имен:
    http {
        # Увеличьте размер ячейки хеша (значение должно быть степенью двойки: 64, 128, 256):
        server_names_hash_bucket_size 128;
        server_names_hash_max_size 4096;
    
        # Если используется большое количество map или types, увеличьте и их:
        types_hash_max_size 2048;
        types_hash_bucket_size 128;
        ...
    }
  3. Если у вас используются сотни доменов в блоке server_name, увеличьте server_names_hash_bucket_size до 256.
  4. Проверьте валидность исправленной конфигурации:
    sudo nginx -t
  5. Примените обновленные параметры: sudo systemctl reload nginx.
Низкоуровневая архитектура: Значение server_names_hash_bucket_size всегда должно быть строго кратно размеру строки процессорного кэша первого уровня (CPU L1 Cache Line — обычно 64 байта). Установка значений, не являющихся степенью двойки (например, 100), приведет к неэффективному расходу памяти и замедлению поиска по доменам.
Практический опыт инженера: В SaaS-платформах и мультиарендных сервисах (multi-tenant) с тысячами персональных поддоменов сразу прописывайте `server_names_hash_bucket_size 256;` в базовый шаблон Ansible/Puppet.

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

Почему эта ошибка не возникает при малом числе доменов?

При небольшом числе стандартных коротких доменов Nginx умещает структуру быстрого поиска в дефолтный размер корзины (32/64 байта). При росте числа доменов или их длины вероятность коллизий возрастает, и алгоритм хеширования требует расширения ячеек памяти.

Влияет ли увеличение bucket_size на потребление оперативной памяти?

Влияние минимально: хеш-таблицы занимают считанные килобайты памяти, но их увеличение кардинально ускоряет роутинг входящих HTTP-запросов между виртуальными хостами.

Что делать, если ошибка повторяется с variables_hash_bucket_size?

Аналогично добавьте директиву variables_hash_bucket_size 128; и variables_hash_max_size 2048; в блок http.

Как узнать размер кэш-линии процессора на Linux?

Выполните команду getconf LEVEL1_DCACHE_LINESIZE (обычно возвращает 64).