錯誤資訊
[root@ip-xxx-xx-xx-xx th]# /etc/init.d/nginx reloadnginx: [emerg] could not build the server_names_hash, you should increase either server_names_hash_max_size: 512 or server_names_hash_bucket_size: 128
nginx: configuration file /etc/nginx/nginx.conf test failed
解決辦法
在/usr/local/nginx/conf/nginx.conf中http{}加入這樣一句話
server_names_hash_max_size 512;
使用 sudo /usr/local/nginx/sbin/nginx -t對nginx設定檔進行檢查,如果還提示
could not build the server_names_hash, you should increase either server_names_hash_max_size: 512 or server_names_hash_bucket_size: 64
則再把 server_names_hash_max_size升值
server_names_hash_max_size 1024;
重啟後測試正常
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
錯誤原因
保存伺服器名字的hash表是由指令 server_names_hash_max_size 和 server_names_hash_bucket_size所控制的。參數hash bucket size總是等於hash表的大小,並且是一路處理器緩存大小的倍數。在減少了在記憶體中的存取次數後,使在處理器中加速查找hash表鍵值成為可能。如果 hash bucket size等於一路處理器緩存的大小,那麼在查找鍵的時候,最壞的情況下在記憶體中查找的次數為2。第一次是確定存儲單元的位址,第二次是在存儲單元中查找鍵值。因此,如果Nginx給出需要增大 hash max size 或 hash bucket size的提示,那麼首要的是增大前一個參數的大小.
具體可參見官方文檔:http://wiki.nginx.org/Optimizations