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

Posted

技术标签:

【中文标题】nginx: [emerg] 无法构建 server_names_hash,你应该增加 server_names_hash_bucket_size【英文标题】:nginx: [emerg] could not build the server_names_hash, you should increase server_names_hash_bucket_size 【发布时间】:2012-12-03 11:21:06 【问题描述】:

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

【问题讨论】:

你看过日志吗? 我应该查看哪些日志? 或者您可以在 server_name 中简单地使用您的域名。 【参考方案1】:

这很可能是因为域名过长。您可以通过添加来解决此问题

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

【讨论】:

有趣的是,即使我的特定 Nginx 错误消息指示我使用 32,我也不得不使用 64。 与@Ryan 相同——NGINX 告诉我使用 64,但我需要 128 才能使其工作。 @jerzy 显然遗漏了一些平凡的早晨细节。 @jerzy 尽管该错误消息的措辞有点模棱两可,但它可能被设计为包含 当前值,而不是指示您使用什么值. @jerzy 在配置 ec2 实例时如何在用户数据中增加这一点。所以基本上在 bash 脚本中?【参考方案2】: 以写权限打开/etc/nginx/nginx.conf 取消注释或添加server_names_hash_bucket_size 64; 重启nginxsudo service nginx restart

如果错误仍然存​​在:

在步骤 128、256、512 等中增加 server_names_hash_bucket_size(每次增加 2 的幂)。例如。 server_names_hash_bucket_size 128; 每次重启nginx,直到错误消失(无论你设置什么值,错误总是一样的)

【讨论】:

感谢您提出增量方法的建议。 nginx的消息一直说设置为64:S 谢谢,通过递增,一切顺利!!【参考方案3】:

这听起来可能有点随机,但它可能会帮助像我这样的 nginx 新手。 当我在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 配置文件中的所有指令都必须以 ; 结尾 我经常在保存/上传文件之前突出显示文件中的;s,作为编辑后的最终检查。

【讨论】:

【参考方案4】:

我就是这样解决的:

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

【讨论】:

以上是关于nginx: [emerg] 无法构建 server_names_hash,你应该增加 server_names_hash_bucket_size的主要内容,如果未能解决你的问题,请参考以下文章

Nginx nginx 无法启动

[emerg]: getpwnam(“nginx”) failed

带有Nginx 1.6.2的CentOS 6.6 - 突然无法重启nginx - nginx:[emerg] open()“/ usr / share / nginx / on”失败(13:权限被拒绝

Nginx 启动提示 [emerg] 配置中没有“事件”部分

nginx: [emerg] "server" 指令在这里不允许

Nginx Serve React 构建和 proxy_pass Django Rest api 服务器