Ошибка «Could not build the server_names_hash» в Nginx появляется при запуске или перезапуске веб-сервера и указывает на неправильные настройки. Разберём причины её возникновения и приведём пошаговое решение.
Введение
Nginx давно зарекомендовал себя как один из самых производительных веб-серверов, который используется для хостинга сайтов, балансировки нагрузки, работы с обратным прокси и кешем. Однако при настройке часто можно столкнуться с ошибками, мешающими корректному запуску.
Одна из таких проблем — сообщение:
[emerg] could not build the server_names_hash, you should increase server_names_hash_bucket_size: 32
Обычно оно появляется при добавлении новых доменов или поддоменов в конфигурацию. На первый взгляд ошибка выглядит сложной, но на деле устраняется буквально одной строкой. Важно лишь понимать, откуда она берётся и как правильно её исправить, чтобы сервер Nginx работал стабильно.
Когда возникает ошибка
Сообщение об ошибке появляется при запуске или перезапуске Nginx, когда система не может построить хеш для списка доменных имён.
Основные причины:
- слишком длинные имена хостов (доменов или поддоменов);
- большое количество server_name в конфигурации;
- несоответствие текущего значения директивы server_names_hash_bucket_size потребностям проекта.
К чему приводит ошибка
Если не устранить проблему сразу, ошибка может серьёзно повлиять на стабильность работы проектов. Она отражается как на доступности сайтов, так и на общем состоянии веб-сервера:
- Веб-сервер не запускается или аварийно останавливается.
- Сайты, работающие на Nginx, становятся недоступны.
- Нагрузка на сервер может перераспределяться неправильно, что критично для сайтов с высоким трафиком или работающих на VPS.
Как исправить проблему
Чтобы устранить ошибку, нужно увеличить размер хеш-таблицы имён серверов.
Шаг 1. Откройте конфигурационный файл Nginx
Обычно он находится по пути:
/etc/nginx/nginx.conf
Шаг 2. Найдите блок http { … }
Все директивы, влияющие на глобальную работу виртуальных хостов, должны располагаться внутри блока http. Именно здесь указываются параметры, которые действуют на весь веб-сервер, включая настройки кеша, логов и работу с именами серверов.
Шаг 3. Добавьте директиву
Добавьте такую директиву:
server_names_hash_bucket_size 64;
При необходимости вместо 64 можно указать большее значение, например 128, если в конфигурации действительно много длинных доменов.
Шаг 4. Проверьте корректность конфигурации
Введите команду:
nginx -t
Если ошибок не найдено, перезапустите Nginx:
systemctl restart nginx
Рекомендации по настройке
Используйте server_names_hash_bucket_size только внутри блока http, а не в server.
Если у вас очень много доменов, дополнительно можно настроить параметр:
server_names_hash_max_size 1024;
Всегда проверяйте конфигурацию командой nginx -t перед перезапуском.
При работе на высоконагруженных сайтах или VPS используйте мониторинг, чтобы отслеживать стабильность веб-сервера.
Заключение
Ошибка «Could not build the server_names_hash» — это одна из тех проблем, которые пугают длиной сообщения, но решаются очень просто. Достаточно добавить директиву server_names_hash_bucket_size в конфигурацию Nginx и указать подходящее значение.
Тем не менее, важно понимать причину её появления. Если на сервере десятки сайтов с длинными доменами, нужно учитывать это при планировании конфигурации. А регулярная проверка настроек, мониторинг логов и грамотная оптимизация помогут избежать подобных ошибок в будущем.
Администраторам VPS и выделенных серверов стоит помнить: корректная настройка Nginx — это залог стабильности и скорости работы сайтов, а также уверенности, что проекты будут доступны пользователям без перебоев.
Читайте в блоге:
- Настраиваем nftables для защиты веб-сервера на Ubuntu 24.04
- Как обновить ядро Linux на Ubuntu 24.04 и откатить изменения при ошибках
- Как перенести Ubuntu 24.04 на новый сервер без переустановки