1. 程式人生 > >nginx:[emerg] could not build server_name_hash

nginx:[emerg] could not build server_name_hash

問題

在分散式專案中,在命令視窗 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

出現這個問題,也有可能是域名配置有誤,最常見的就是格式不規範導致.

通常情況下,在同時配置多個域名的時候,容易犯這個錯誤.

比如說,多個域名中間要用空格,名字不宜過長.

這個得要嚴謹細心.