nginx: [emerg] nie mógł zbudować server_names_hash, należy zwiększyć server_names_hash_bucket_size

110

Jestem w trakcie konfigurowania nowego serwera. Wybrany przeze mnie serwer http to NGINX. Chcę dodać domenę audi-freunde-einbeck.dejako wirtualnego hosta. Mam już tam 2 inne domeny i działa dobrze, ale kiedy próbuję dodać wyżej wymienioną domenę i uruchomić serwer, to mi się wydaje Job failed. See system journal and 'systemctl status' for details. , że to z powodu myślników, więc wypróbowałem tylko różne inne domeny z myślnikami i bez , ale bez szczęścia. Ten sam błąd. co może być tego przyczyną? Próbowałem też zrestartować komputer, naprawdę jestem zagubiony. Każda pomoc byłaby bardzo mile widziana.

Trochę się pobawiłem i odkryłem, że kiedy wstawię tylko jedną domenę, to działa. Ale kiedy wstawiam inną domenę, przestaje. Oto wyjście w stanie:

[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
oengelha
źródło
Czy obejrzałeś jakieś dzienniki?
willglynn
Które dzienniki mam przeglądać?
oengelha
lub możesz użyć po prostu nazwy swojej domeny w polu nazwa_serwera.
saran

Odpowiedzi:

223

Dzieje się tak najprawdopodobniej z powodu długiej nazwy domeny. Możesz to naprawić, dodając

server_names_hash_bucket_size  64;

na górze twojego httpbloku (prawdopodobnie znajduje się w /etc/nginx/nginx.conf). Cytuję z dokumentacją nginx Co zrobić, gdy pojawi się ten błąd: In this case, the directive value should be increased to the next power of two. Więc w twoim przypadku powinno być 64.

Jeśli nadal pojawia się ten sam błąd, spróbuj zwiększyć do 128 i dalej.

Źródła: http://nginx.org/en/docs/http/server_names.html#optimization

Jap Mul
źródło
8
Co ciekawe, musiałem użyć 64, mimo że mój konkretny komunikat o błędzie Nginx instruował mnie, abym używał 32.
Ryan
46
Tak samo jak @Ryan - NGINX mówił mi, żebym używał 64, ale potrzebowałem 128, aby to działało.
jerzy
@jerzy Najwyraźniej pominięto jakiś przyziemny poranny szczegół.
Erutan409
4
@jerzy Chociaż nieco niejednoznaczne sformułowanie tego komunikatu o błędzie sugeruje coś innego, prawdopodobnie został on zaprojektowany tak, aby zawierał bieżącą wartość , a nie po to, aby poinstruować Cię, jakiej wartości użyć.
anothernode,
@jerzy, jak można by to zwiększyć w danych użytkownika podczas udostępniania instancji ec2. więc w zasadzie w skrypcie bash?
shan
32
  • otwórz /etc/nginx/nginx.confz uprawnieniami do zapisu
  • odkomentować lub dodać server_names_hash_bucket_size 64;
  • zrestartuj nginx sudo service nginx restart

Jeśli błąd nadal występuje:

  • wzrost server_names_hash_bucket_sizew krokach 128, 256, 512 i tak dalej (zwiększając za każdym razem o potęgę 2). na przykład.server_names_hash_bucket_size 128;
  • zrestartuj nginx za każdym razem, aż błąd zniknie (błąd zawsze będzie taki sam bez względu na wartość, którą już ustawiłeś)
Raghavendra
źródło
1
dzięki za zasugerowanie podejścia przyrostowego. Wiadomość od nginx powtarzała się, ustaw ją na 64: S
ybl
6

Brzmi to może trochę przypadkowo, ale może pomóc nowicjuszowi nginx, jak ja.
Otrzymałem ten błąd, gdy zostawiłem ;na server_namelinii.

miał:

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

naprawić:

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

Wszystkie dyrektywy w plikach konfiguracyjnych nginx muszą kończyć się znakiem ;
I często zaznaczam ;s w moim pliku przed zapisaniem / przesłaniem jako ostateczne sprawdzenie po edycji.

SherylHohman
źródło
3

Oto jak rozwiązałem:

cd /etc/nginx/

sudo nano nginx.conf
  • --uncomment lub dodaj server_names_hash_bucket_size 64 -
  • --increase server_names_hash_bucket_size "164" -
cd /etc/nginx/sites-available/

sudo nginx -t

  • jeśli wszystko jest w porządku
sudo service nginx restart
Flavio Oliveira
źródło