Nginx: [ emerg ]无法构建 server _ names_ hash,应该增加 server _ names_ hash _ bucket _ size

我正在建立一个新的服务器。我选择的 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
125496 次浏览

这很可能是因为域名太长造成的。您可以通过添加

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

  • 用写权限打开 /etc/nginx/nginx.conf
  • 取消注释或添加 server_names_hash_bucket_size 64;
  • 重新启动 nginx sudo service nginx restart

如果错误仍然存在:

  • 在步骤128,256,512中增加 server_names_hash_bucket_size,以此类推(每次增加2的幂)
  • 每次重新启动 nginx,直到错误消失(不管您已经设置了什么值,错误总是相同的)

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

(为了突出显示,我使用 Find All: ;)

我就是这么解决的:

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

也许你对桶的大小没意见。这种情况发生时,您已经在/etc/nginx/sites- 启用/中创建了 symlink,并且正在尝试使用 certbot 续订或重新安装 ssl。从/etc/nginx/sites- 启用/your-domain-conf-file 中删除该文件 并重新运行 certbot 命令,如下所示

 sudo certbot --nginx -d your-domain-name.com

应该可以。