188 votes

nginx : [emerg] n'a pas pu construire le server_names_hash, vous devez augmenter server_names_hash_bucket_size

Je suis en train de mettre en place un nouveau serveur. Le serveur http de mon choix est NGINX. Je veux ajouter le domaine audi-freunde-einbeck.de comme hôte virtuel. J'ai déjà deux autres domaines dans le serveur et cela fonctionne bien, mais lorsque j'essaie d'ajouter le domaine mentionné ci-dessus et de démarrer le serveur, je reçois le message suivant Job failed. See system journal and 'systemctl status' for details. Je pensais que c'était à cause des tirets, alors j'ai essayé d'autres domaines avec et sans tirets, mais sans succès. Même erreur. Quelle pourrait en être la cause ? J'ai également essayé de redémarrer, mais je ne sais vraiment pas quoi faire. Toute aide serait grandement appréciée.

J'ai joué un peu et j'ai découvert que, lorsque je ne mets qu'un seul domaine, cela fonctionne. Mais lorsque je mets un autre domaine, cela s'arrête. Voici la sortie en état :

[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

394voto

jagsler Points 2223

Cela est probablement dû au fait que le nom de domaine est long. Vous pouvez résoudre ce problème en ajoutant

server_names_hash_bucket_size  64;

en haut de votre http (probablement situé dans /etc/nginx/nginx.conf ). Je cite dans la documentation de nginx ce qu'il faut faire lorsque cette erreur apparaît : In this case, the directive value should be increased to the next power of two . Dans votre cas, il devrait donc devenir 64.

Si vous obtenez toujours la même erreur, essayez de passer à 128 et plus.

Référence : http://nginx.org/en/docs/http/server_names.html#optimization

57voto

Raghavendra Points 612
  • ouvrir /etc/nginx/nginx.conf avec des privilèges d'écriture
  • décommenter ou ajouter server_names_hash_bucket_size 64;
  • redémarrer nginx sudo service nginx restart

Si l'erreur persiste :

  • augmentation de server_names_hash_bucket_size par étapes de 128, 256, 512, et ainsi de suite (en augmentant à chaque fois d'une puissance de 2). ex. server_names_hash_bucket_size 128;
  • redémarrer le nginx à chaque fois jusqu'à ce que l'erreur disparaisse (l'erreur sera toujours la même quelle que soit la valeur que vous avez déjà définie)

10voto

Flavio Oliveira Points 141

C'est ainsi que j'ai résolu le problème :

cd /etc/nginx/

sudo nano nginx.conf
  • --uncommenter ou ajouter server_names_hash_bucket_size 64 --

  • --increase server_names_hash_bucket_size "164" --.

    cd /etc/nginx/sites-available/

    sudo nginx -t

  • si tout va bien

    sudo service nginx restart

9voto

SherylHohman Points 3894

Cela semble peut-être un peu aléatoire, mais cela pourrait aider un novice en matière de nginx comme moi.
J'ai eu cette erreur quand j'ai laissé un ; sur le server_name ligne.

avait :

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

fixer :

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

Toutes les directives dans les fichiers de configuration de nginx doivent se terminer par un caractère ;
Je souligne souvent ; dans mon fichier avant de l'enregistrer ou de le télécharger, afin de procéder à une vérification finale après l'édition.

(Pour mettre en évidence, j'utilise Find All : ; )

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X