NGINX有关较长域名的提示和解决

发布于2020/02/27更新于2024/7/5

$ sudo service nginx configtest
nginx: [emerg] could not build server_names_hash, you should increase server_names_hash_bucket_size: 64
nginx: configuration file /etc/nginx/nginx.conf test failed

在使用NGINX时,如果配置server_name时使用了过长的域名,则在检查配置文件或启动服务/开启进程[*]时,会报出上面的提示。简单来说,这个提示表示:当前需要加载的配置文件中含有较长的域名,NGINX无法有效对其哈希,需要增加server_names_hash_bucket_size指令的数值。

根据官方文档对域名(server_name)优化的解释,为使NGINX在读取、解析、对比域名时能最大程度命中CPU缓存,对域名进行了哈希,并将域名存放在一个哈希表中(关于该哈希表的构造[*]);而位于http块级的server_names_hash_max_sizeserver_names_hash_bucket_size两个指令参数可用于控制这个哈希表的构造。一般来说,当配置文件中域名数量很多或存在较长域名时,需要调整这两个指令参数:

根据开头给出的错误提示,配置文件中可能有较长的域名,如“toooooooo.looooooooong.server.name.example.org”。而当前server_names_hash_bucket_size的值为64,因此,需要将其设置为128,直接在NGINX的配置文件中的http块中添加该指令即可:

http {
    server_names_hash_bucket_size 128;
    ...
}

关于这两个指令的更多解释,还可以参考[*]。

Leave a Reply

Your email address will not be published. Required fields are marked *