Ошибка Nignx could not build the server_names_hash


При добавлении очередного сайта на нагруженном сервере иногда можно столкнуться с ошибкой could not build the server_names_hash. Nignx при этом перестает запускаться.



Ошибка could not build the server_names_hash в логах Nignx и как ее исправить


Чтобы новый сайт был активирован требуется перечитать конфигурацию, соответственно — перезапустить Nignx.



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



Протестировав конфигурацию можно увидеть полностью текст ошибки

nginx -t

nginx: [emerg] could not build the server_names_hash, you should increase either server_names_hash_max_size: 512 or server_names_hash_bucket_size: 64



Числе могут быть другими, они считываются из nginx.conf или являются стандартными значениями если директивы не заданы.


Такие же ошибки можно увидеть в /var/log/nginx/error.log (о логировании)


Причина в слишком большом количестве подключаемых конфигурационных файлов виртуальных хостов, в которых встречается директива server_name.



Ошибка устраняется увеличением лимитов


Параметр со значением добавляется в основной конфигурационный файл сервиса. Файл открывается с помощью любого текстового редактора, например mcedit



mcedit /etc/nginx/nginx.conf

server_names_hash_bucket_size 320;



Значение директивы по умолчанию — 64, она закомментирована. Знак комментария следует убрать, затем постепенно увеличивать значение пока nginx -t не перестанет выдавать ошибку.



Когда ошибки более не возникает веб сервер следует перезапустить.

service nginx restart



Сайты после этого должны стать доступны. Как следует из текста ошибки можно увеличивать и другой лимит — директива также должна размещаться в секции http файла nginx.conf



Читайте подробнее про структуру конфигурационных файлов Nginx и используемые сервисом контексты.

Подробнее про server_name на официальном сайте Nginx

Сказать спасибо