nginx: [emerg] no pudo construir el server_names_hash, deberías aumentar server_names_hash_bucket_size

101

Estoy en el proceso de configurar un nuevo servidor. El servidor http de mi elección es NGINX. Quiero agregar el dominio audi-freunde-einbeck.decomo host virtual. Ya tengo otros 2 dominios allí y funciona bien, pero cuando intento agregar el dominio mencionado anteriormente e iniciar el servidor, Job failed. See system journal and 'systemctl status' for details. pensé que era debido a los guiones, así que probé solo varios otros dominios con y sin guiones. , pero sin suerte. Mismo error. ¿Qué podría estar causando esto? También intenté reiniciar, realmente estoy perdido aquí. Cualquier ayuda será muy apreciada.

He jugado un poco y descubrí que, cuando solo pongo un dominio, funciona. Pero cuando coloco otro dominio, se detiene. Aquí está la salida en estado:

[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
fuente
¿Ha mirado algún registro?
willglynn
¿Qué registros debería mirar?
oengelha
o puede usar simplemente su nombre de dominio dentro de su nombre_servidor.
saran

Respuestas:

206

Lo más probable es que esto suceda debido al nombre de dominio largo. Puede solucionar esto agregando

server_names_hash_bucket_size  64;

en la parte superior de su httpbloque (probablemente ubicado en /etc/nginx/nginx.conf). Cito de la documentación nginx lo que hay que hacer cuando aparece este error: In this case, the directive value should be increased to the next power of two. Entonces, en su caso, debería convertirse en 64.

Si aún obtiene el mismo error, intente aumentar a 128 y más.

Referencia: http://nginx.org/en/docs/http/server_names.html#optimization

Jap Mul
fuente
8
Curiosamente, tuve que usar 64 a pesar de que mi mensaje de error de Nginx particular me indicaba que usara 32.
Ryan
44
Igual que @Ryan: NGINX me decía que usara 64, pero necesitaba 128 para que funcionara.
Jerzy
@jerzy Al parecer, se perdió algún detalle mundano de la mañana.
Erutan409
4
@jerzy Aunque la redacción ligeramente ambigua de ese mensaje de error sugiere lo contrario, probablemente fue diseñado para incluir el valor actual , no para indicarle qué valor usar.
nodo
@jerzy, ¿cómo se aumentaría esto en datos de usuario al aprovisionar una instancia ec2? entonces básicamente en bash script?
shan
29
  • abrir /etc/nginx/nginx.confcon privilegios de escritura
  • descomentar o agregar server_names_hash_bucket_size 64;
  • reiniciar nginx sudo service nginx restart

Si el error persiste:

  • aumenta server_names_hash_bucket_sizeen los pasos 128, 256, 512, etc. (aumentando en una potencia de 2 cada vez). p.ej.server_names_hash_bucket_size 128;
  • reinicie el nginx cada vez hasta que desaparezca el error (el error siempre será el mismo sin importar el valor que ya haya establecido)
Raghavendra
fuente
gracias por sugerir el enfoque incremental. El mensaje de nginx seguía diciendo 64
configúrelo en
5

Esto suena quizás un poco aleatorio, pero podría ayudar a un novato de nginx como yo.
Recibí este error cuando dejé un mensaje ;en server_namelínea.

tenido:

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

reparar:

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

Todas las directivas en los archivos de configuración de nginx deben terminar con un ;
I a menudo resalto ;en mi archivo antes de guardar / cargar como verificación final después de editar.

SherylHohman
fuente
2

Así es como resolví:

cd /etc/nginx/

sudo nano nginx.conf
  • --uncomentar o agregar server_names_hash_bucket_size 64 -
  • --increase server_names_hash_bucket_size "164" -
cd /etc/nginx/sites-available/

sudo nginx -t

  • si todo esta bien
sudo service nginx restart
Flavio Oliveira
fuente