nginx:[emerg]无法构建server_names_hash,应增加server_names_hash_bucket_size


109

我正在设置新服务器。我选择的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

或者您可以在server_name内仅使用您的域名。
萨兰

Answers:


222

由于域名太长,很可能发生这种情况。您可以通过添加来解决此问题

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
瑞恩

46
与@Ryan相同-NGINX告诉我使用64,但是我需要128使其正常运行。
jerzy '16

@jerzy显然错过了一些平凡的早晨细节。
Erutan409

4
@jerzy即使该错误消息的措辞有些含糊,但暗示了其他含义,它可能设计为包括当前值,而不是指示您使用什么值。
anothernode '19

@jerzy在配置ec2实例时如何在用户数据中增加它。所以基本上在bash脚本中?

31
  • /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

6

这听起来似乎有些随机,但它可能对像我这样的nginx newb有所帮助。
当我离开一个我得到这个错误;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配置文件中的所有指令都必须以;
I结尾;。在保存/上载之前,我经常在文件中突出显示s,以作为编辑后的最终检查。


3

这是我解决的方法:

cd /etc/nginx/

sudo nano nginx.conf
  • -取消注释或添加server_names_hash_bucket_size 64-
  • -增加server_names_hash_bucket_size“ 164”-
cd /etc/nginx/sites-available/

sudo nginx -t

  • 如果一切都好
sudo service nginx restart
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.