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

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

server_names_hash_bucket_size 320;

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

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

service nginx restart

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

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