SystemdDoctor
служба не работает nginx конфигурация

nginx: could not build server_names_hash

Сообщение «could not build server_names_hash, you should increase server_names_hash_bucket_size» появляется, когда имена серверов не укладываются в таблицу заданного размера. Это не ошибка конфигурации, а настройка, которую нужно поднять под ваш набор доменов.

Вероятные причины

По порядку: сверху то, что встречается чаще.

  1. Длинное имя сервера не укладывается в размер ячейки

    Размер ячейки задан кратно размеру строки кеша процессора. Одного длинного имени достаточно, чтобы таблица перестала строиться.

  2. Много доменов, таблица не вмещает их все

    При сотнях имён не хватает не ячейки, а общего размера таблицы. Сообщение тогда указывает на server_names_hash_max_size.

Диагностика

Команды идут в том порядке, в котором их стоит выполнять: каждая следующая проверяет то, что осталось после предыдущей.

Сообщение прямо указывает, какую настройку увеличить.

sudo nginx -t

Сколько имён в итоговой конфигурации.

sudo nginx -T 2>/dev/null | grep -c server_name

Решение

Решение своё для каждой причины. Сначала определите, какая из них ваша, — иначе правки наложатся друг на друга.

1. Длинное имя сервера не укладывается в размер ячейки
Почему происходит
Размер ячейки задан кратно размеру строки кеша процессора. Одного длинного имени достаточно, чтобы таблица перестала строиться.
Как проверить
Найдите самые длинные имена.
sudo nginx -T 2>/dev/null | grep server_name | tr " " "\n" | awk "{ print length, \$0 }" | sort -rn | head -5
Как исправить
Увеличьте размер ячейки до следующего значения кратного степени двойки — обычно достаточно 128.
sudo sed -i "s/# server_names_hash_bucket_size 64;/server_names_hash_bucket_size 128;/" /etc/nginx/nginx.conf && sudo nginx -t
2. Много доменов, таблица не вмещает их все
Почему происходит
При сотнях имён не хватает не ячейки, а общего размера таблицы. Сообщение тогда указывает на server_names_hash_max_size.
Как проверить
Посчитайте число имён.
sudo nginx -T 2>/dev/null | grep -c server_name
Как исправить
Поднимите server_names_hash_max_size до значения с запасом относительно числа имён.

Пример вывода

Одно длинное имя не укладывается в размер ячейки. Пример показательный: он собран на тестовой машине специально для этой страницы, а не взят из чужого журнала.

nginx[6210]: nginx: [emerg] could not build server_names_hash, you should increase server_names_hash_bucket_size: 64
nginx[6210]: nginx: configuration file /etc/nginx/nginx.conf test failed

Связанные ошибки

Где встречается чаще всего

Источники

  • Документация nginx: server_names_hash_bucket_size документация программы
    сверено 15 сентября 2026
  • Воспроизведено на тестовой машине, systemd 255 (Ubuntu 24.04)
    Воспроизведено доменом длиной более 64 символов.
    собственная проверка, systemd 255
    сверено 15 сентября 2026