nginx:[emerg] could not build server_name_hash
阿新 • • 發佈:2018-11-11
問題
在分散式專案中,在命令視窗 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
出現這個問題,也有可能是域名配置有誤,最常見的就是格式不規範導致.
通常情況下,在同時配置多個域名的時候,容易犯這個錯誤.
比如說,多個域名中間要用空格,名字不宜過長.
這個得要嚴謹細心.