我有以下虚拟主机
server { server_name abc.example.com; root /var/www/test/; index index.html; }
在运行nginx -s reload
,出现以下错误:
nginx:[emerg]无法build立server_names_hash,你应该增加server_names_hash_bucket_size:32
对于具有15个或更多字符的任何server_name,情况也是如此。
如果我将server_name设置为ab.example.com
(或15个字符ab.example.com
任何名称),则问题将停止显示。
为了解决这个问题,我在/etc/nginx/nginx.conf
(以前没有定义)中添加了以下内容:
server_names_hash_bucket_size 64;
设置为33也可以,但不是32。
为什么server_name的默认最大长度是14个字符?
这个限制是由nginx的默认设置还是由系统运行?
15个server_name如何影响最大哈希桶大小? (系统上只定义了4个虚拟主机)
当server_name
太大而不能放入散列桶时,会发生此错误。
server_names_hash_bucket_size
的默认值取决于服务器的CPU高速caching行大小。 特别是它要尽可能小, 以减lessCPUcaching未命中 ,因为server_name
必须在每个请求上查找。
至于你为什么限制在14个字符,而不是预期的31,我怀疑有两种可能性:
iconv
东西来修复它。 缺省长度应在启动时自动确定,具体取决于所使用的服务器名称,但在reload
操作期间也应该更新。 看看它是否工作,而无需手动设置桶大小,但重新启动,而不是重新加载。