При добавлении очередного сайта на нагруженном сервере иногда можно столкнуться с ошибкой 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