nginx: [Emerg] не смог построить server_names_hash, вам следует увеличить server_names_hash_bucket_size


101

Я настраиваю новый сервер. Я выбрал http-сервер NGINX. Я хочу добавить домен audi-freunde-einbeck.deв качестве виртуального хоста. У меня уже есть 2 других домена, и он работает нормально, но когда я пытаюсь добавить вышеупомянутый домен и запускать сервер, он дает мне, Job failed. See system journal and 'systemctl status' for details. я думал, что это из-за тире, поэтому я пробовал просто разные другие домены с дефисами и без них , но не повезло. Та же ошибка. Что может быть причиной этого? Я тоже пробовал перезагрузку, тут реально в недоумении. Любая помощь будет принята с благодарностью.

Я немного поигрался и обнаружил, что когда я помещаю только один домен, он работает. Но когда я вставляю другой домен, он останавливается. Вот результат в статусе:

[root@netzmelone nginx]# systemctl status nginx
nginx.service - A high performance web server and a reverse proxy server
      Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled)
      Active: failed (Result: exit-code) since Sun, 16 Dec 2012 11:38:08 +0000; 7s ago
     Process: 14239 ExecStop=/usr/sbin/nginx -g pid /run/nginx.pid; -s quit (code=exited, status=1/FAILURE)
     Process: 14232 ExecStart=/usr/sbin/nginx -g pid /run/nginx.pid; daemon on; master_process on; (code=exited, status=0/SUCCESS)
     Process: 14242 ExecStartPre=/usr/sbin/nginx -t -q -g pid /run/nginx.pid; daemon on; master_process on; (code=exited, status=1/FAILURE)
    Main PID: 14234 (code=exited, status=0/SUCCESS)
      CGroup: name=systemd:/system/nginx.service

Dec 16 11:38:08 netzmelone nginx[14242]: nginx: [emerg] could not build the server_names_hash, you should increase server_names_hash_bucket_size: 32
Dec 16 11:38:08 netzmelone nginx[14242]: nginx: configuration file /etc/nginx/nginx.conf test failed

Вы смотрели какие-нибудь логи?
willglynn

Какие журналы мне следует посмотреть?
oengelha

или вы можете просто использовать свое доменное имя внутри вашего server_name.
саран

Ответы:


207

Скорее всего, это происходит из-за длинного доменного имени. Вы можете исправить это, добавив

server_names_hash_bucket_size  64;

в верхней части вашего httpблока (вероятно, находится внутри /etc/nginx/nginx.conf). Цитирую из документации Nginx , что делать , когда появляется эта ошибка: In this case, the directive value should be increased to the next power of two. Итак, в вашем случае он должен стать 64.

Если вы по-прежнему получаете ту же ошибку, попробуйте увеличить до 128 и выше.

Ссылка: http://nginx.org/en/docs/http/server_names.html#optimization


8
Интересно, что мне пришлось использовать 64, хотя в моем конкретном сообщении об ошибке Nginx мне предлагалось использовать 32.
Райан,

44
То же, что и @Ryan - NGINX говорил мне использовать 64, но мне нужно 128, чтобы он работал.
jerzy

@jerzy Очевидно, упущена какая-то обычная утренняя деталь.
Erutan409

4
@jerzy Несмотря на то, что несколько двусмысленная формулировка этого сообщения об ошибке предполагает иное, оно, вероятно, было разработано для включения текущего значения , а не для указания того, какое значение использовать.
anothernode

@jerzy, как можно увеличить это в пользовательских данных при инициализации экземпляра ec2. так в основном в сценарии bash?
шань

29
  • открытым /etc/nginx/nginx.conf с правами записи
  • раскомментировать или добавить server_names_hash_bucket_size 64;
  • перезапустить nginx sudo service nginx restart

Если ошибка не исчезла:

  • увеличение server_names_hash_bucket_size с шагом 128, 256, 512 и т. д. (увеличивая каждый раз в степени 2). например.server_names_hash_bucket_size 128;
  • перезапускайте nginx каждый раз, пока ошибка не исчезнет (ошибка всегда будет одинаковой, независимо от того, какое значение вы уже установили)

спасибо за предложение поэтапного подхода. В сообщении nginx говорилось, что установите его так 64: S
ybl

5

Возможно, это звучит немного случайно, но это может помочь новичку в nginx, подобному мне.
Я получил эту ошибку, когда остановился ;на server_nameлинии.

было:

server_name    www.mydomain.com  
access_log     /var/log/nginx/www.mydomain.com; 

исправить:

server_name    www.mydomain.com;  
access_log     /var/log/nginx/www.mydomain.com; 

Все директивы в конфигурационных файлах nginx должны заканчиваться символом, который ;
я часто выделяю ;в моем файле перед сохранением / загрузкой в ​​качестве окончательной проверки после редактирования.


2

Вот как я решил:

cd /etc/nginx/

sudo nano nginx.conf
  • - раскомментируйте или добавьте server_names_hash_bucket_size 64 -
  • --увеличить server_names_hash_bucket_size "164" -
cd /etc/nginx/sites-available/

sudo nginx -t

  • если все в порядке
sudo service nginx restart
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.