nginx: [emerg] não foi possível construir o server_names_hash, você deve aumentar server_names_hash_bucket_size


110

Estou configurando um novo servidor. O servidor http de minha escolha é o NGINX. Quero adicionar o domínio audi-freunde-einbeck.decomo um host virtual. Já tenho 2 outros domínios lá e funciona bem, mas quando tento adicionar o domínio mencionado acima e iniciar o servidor, Job failed. See system journal and 'systemctl status' for details. achei que fosse por causa dos travessões, então tentei apenas vários outros domínios com e sem hífens , mas sem sorte. Mesmo erro. O que poderia estar causando isso? Eu também tentei reiniciar, estou realmente perdido aqui. Qualquer ajuda seria muito apreciada.

Eu brinquei um pouco e descobri que, quando coloco apenas um domínio, ele funciona. Mas quando coloco outro domínio, ele para. Aqui está a saída em status:

[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

Você olhou algum registro?
willglynn

Quais logs devo examinar?
Oengelha

ou você pode usar simplesmente seu nome de domínio dentro de seu server_name.
Saran

Respostas:


223

Provavelmente, isso está acontecendo por causa do nome de domínio longo. Você pode corrigir isso adicionando

server_names_hash_bucket_size  64;

no topo do seu httpbloco (provavelmente localizado em /etc/nginx/nginx.conf). Cito a documentação nginx o que fazer quando aparece esse erro: In this case, the directive value should be increased to the next power of two. Portanto, no seu caso, deve ser 64.

Se você ainda receber o mesmo erro, tente aumentar para 128 e mais.

Referência: http://nginx.org/en/docs/http/server_names.html#optimization


8
Curiosamente, tive que usar 64, embora minha mensagem de erro específica do Nginx estivesse me instruindo a usar 32.
Ryan

46
O mesmo que @Ryan - NGINX estava me dizendo para usar 64, mas eu precisava de 128 para fazer funcionar.
jerzy

@jerzy Alguns detalhes mundanos da manhã foram perdidos, aparentemente.
Erutan409

4
@jerzy Mesmo que a formulação ligeiramente ambígua dessa mensagem de erro sugira o contrário, ela provavelmente foi projetada para incluir o valor atual , não para instruí-lo sobre qual valor usar.
anothernode

@jerzy, como alguém faria para aumentar isso em dados de usuário ao provisionar uma instância ec2. então, basicamente, em script bash?
Shan

32
  • aberto /etc/nginx/nginx.confcom privilégios de escrita
  • descomente ou adicione server_names_hash_bucket_size 64;
  • reinicie o nginx sudo service nginx restart

Se o erro ainda persistir:

  • aumentar server_names_hash_bucket_sizenas etapas 128, 256, 512 e assim por diante (aumentando em uma potência de 2 a cada vez). por exemplo.server_names_hash_bucket_size 128;
  • reinicie o nginx toda vez até que o erro desapareça (o erro sempre será o mesmo, não importa o valor que você já definiu)

1
obrigado por sugerir a abordagem incremental. A mensagem do nginx dizia definir para 64: S
ybl

6

Isso pode soar um pouco aleatório, mas pode ajudar um nginx newb como eu.
Recebi este erro quando parei ;na server_namelinha.

teve:

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

consertar:

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

Todas as diretivas nos arquivos de configuração nginx devem terminar com um ;
I frequentemente realçado ;no meu arquivo antes de salvar / enviar como uma verificação final após a edição.


3

Foi assim que resolvi:

cd /etc/nginx/

sudo nano nginx.conf
  • --descomente ou adicione server_names_hash_bucket_size 64 -
  • --aumentar server_names_hash_bucket_size "164" -
cd /etc/nginx/sites-available/

sudo nginx -t

  • se tudo estiver bem
sudo service nginx restart
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.