问题
在分布式项目中,在命令窗口 nginx -s reload 后,出现以下错误信息:
分析
1.
在nginx.conf中配置添加了多一个匿名,server_names,就出现这种错误.
把刚添加的配置删除,nginx可以正常启动.说明这段配置出了问题.
2.
本人同时也查看了日志文件(error.log):
信息如下:
could not build server_names_hash, you should increase server_names_hash_bucket_size: 32
同样提示长度不够.
原因
定义大量名字或者定义非常长的名字时,那就需要在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的nginx.conf配置中的http字段添加如下配置:
http{
....
server_names_hash_max_size 512;
server_names_hash_bucket_size 128;
.......
}
tips
出现这个问题,也有可能是域名配置有误,最常见的就是格式不规范导致.
通常情况下,在同时配置多个域名的时候,容易犯这个错误.
比如说,多个域名中间要用空格,名字不宜过长.
这个得要严谨细心.