当我们在使用nginx作为web服务器时,可能会出现类似“nginx could not build the server_names_hash”的错误提示。这个错误通常是由于nginx中定义的server name太多,超出了默认的hash bucket size所致。
要解决这个问题,我们需要改变nginx配置中的server_names_hash_max_size和server_names_hash_bucket_size两个参数的值来提高hash bucket size大小。以下是解决方法的详细步骤:
步骤一:确定当前的nginx版本
在命令行中输入以下指令即可查看nginx的版本信息:
nginx -v
如果你的nginx版本为1.7.11及以上,则需要将server_names_hash_bucket_size设置为power of two,即2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096等值。
步骤二:确定hash bucket大小
在nginx的配置文件中添加如下指令,即可查看当前hash bucket的大小:
nginx -V 2>&1 | grep -o with-http_stub_status_module
在指令中加入“with-http_stub_status_module”的作用是为了查看当前nginx配置开启状态下是否开启了http_stub_status_module模块,该模块可以用于获取nginx的状态信息。
通过该指令可以得到类似如下的输出:
--with-http_stub_status_module
输出结果中的http_stub_status_module就代表nginx当前已开启了该模块。
步骤三:修改nginx配置文件
打开nginx的配置文件,找到http块,在块内添加如下代码:
http {
server_names_hash_bucket_size 64;
server_names_hash_max_size 512;
}
server_names_hash_bucket_size是hash bucket的大小,server_names_hash_max_size是server name的最大数目。根据实际情况修改两个配置项的数值,可以根据上述步骤二中查询到的nginx版本号选择正确的server_names_hash_bucket_size数值。
示例一:
在配置文件中添加如下代码:
http {
server_names_hash_bucket_size 64;
server_names_hash_max_size 512;
}
执行nginx -s reload,即可重启nginx生效,解决“nginx could not build the server_names_hash”的问题。
示例二:
在nginx 1.7.11及以上的版本中,需要将server_names_hash_bucket_size设置为power of two,即2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096等值。
例如,在配置文件中添加如下代码:
http {
server_names_hash_bucket_size 64;
server_names_hash_max_size 512;
}
执行nginx -s reload,即可重启nginx生效,解决“nginx could not build the server_names_hash”的问题。
通过上述步骤,我们可以很方便地解决nginx因server name过多而无法建立hash bucket的问题。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:nginx could not build the server_names_hash 解决方法 - Python技术站