nginx: [emerg] не зміг створити server_names_hash, вам слід збільшити server_names_hash_bucket_size


102

Зараз я налаштовую новий сервер. Вибраний 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

або ви можете просто використовувати своє доменне ім'я всередині вашого імені_сервера.
саран,

Відповіді:


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 Очевидно, якусь буденну ранкову деталь було пропущено.
Erutan409

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

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

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, як я.
Я отримав цю помилку, коли зупинив a ;на 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
  • --розкоментувати або додати імена_серверів_хаш_букет_розмір 64 -
  • --збільшити_імена_сервера_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.