今天在nginx中增加了一个域名后,停止nginx并重启,结果停在的时候nginx报错:
Could not build the server_names_hash,you should increase server_names_hash_bucket_size:32
查了官方帮助,原来是定义的名字太长,默认为32,改大点,最后以2的倍数增长。
在nginx.conf文件中的http中添加或者修改 server_names_hash_bucket_size 64;或者更大。
以下引用官方文档片段 http://nginx.org/cn/docs/http/server_names.html :
---------------------------------------------------------
如果定义了大量名字,或者定义了非常长的名字,那可能需要在http配置块中使用server_names_hash_max_size和server_names_hash_bucket_size指令进行调整。server_names_hash_bucket_size的默认值可能是32,或者是64,或者是其他值,取决于CPU的缓存行的长度。如果这个值是32,那么定义“too.long.server.name.example.org
”作为虚拟主机名就会失败,而nginx显示下面错误信息:
could not build the server_names_hash, you should increase server_names_hash_bucket_size: 32
出现了这种情况,那就需要将指令的值扩大一倍:
http { server_names_hash_bucket_size 64; ...
如果定义了大量名字,得到了另外一个错误:
could not build the server_names_hash, you should increase either server_names_hash_max_size: 512 or server_names_hash_bucket_size: 32
那么应该先尝试设置server_names_hash_max_size的值差不多等于名字列表的名字总量。如果还不能解决问题,或者服务器启动非常缓慢,再尝试提高server_names_hash_bucket_size的值。
如果只为一个监听端口配置了唯一的主机,那么nginx就完全不会测试虚拟主机名了(也不会为监听端口建立哈希表)。不过,有一个例外,如果定义的虚拟主机名是一个含有捕获组的正则表达式,这时nginx就不得不执行这个表达式以得到捕获组。
转载于:https://blog.51cto.com/sxfenglei/1374205