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的主要内容,如果未能解决你的问题,请参考以下文章
[emerg]: getpwnam(“nginx”) failed
带有Nginx 1.6.2的CentOS 6.6 - 突然无法重启nginx - nginx:[emerg] open()“/ usr / share / nginx / on”失败(13:权限被拒绝
Nginx 启动提示 [emerg] 配置中没有“事件”部分