Tengo el siguiente host virtual
server
{
server_name abc.example.com;
root /var/www/test/;
index index.html;
}
Cuando ejecuto nginx -s reload
me sale el siguiente error:
nginx: [emerg] no pudo construir el server_names_hash, debería aumentar server_names_hash_bucket_size: 32
Lo mismo sucede con cualquier nombre_servidor que tenga 15 o más caracteres.
Si configuro server_name en ab.example.com
(o cualquier nombre con menos de 15 caracteres) el problema deja de manifestarse.
Para solucionar esto, agregué lo siguiente a /etc/nginx/nginx.conf
(no estaba definido antes):
server_names_hash_bucket_size 64;
Establecerlo en 33 también funcionó, pero no en 32.
¿Por qué la longitud máxima predeterminada es de 14 caracteres para server_name?
¿Es este límite impuesto por la configuración predeterminada de nginx o por el sistema en el que se ejecuta?
¿Cómo afecta un server_name de 15 al tamaño máximo del depósito de hash? (solo hay 4 hosts virtuales definidos en el sistema)
fuente
grep "" /sys/devices/system/cpu/cpu?/cache/index?/coherency_line_size
?/sys/devices/system/cpu/cpu0/cache/index0/coherency_line_size:64
/sys/devices/system/cpu/cpu0/cache/index1/coherency_line_size:64
/sys/devices/system/cpu/cpu0/cache/index2/coherency_line_size:64
Respuestas:
Este error ocurre cuando
server_name
es demasiado grande para caber en el depósito de hash .El valor predeterminado para
server_names_hash_bucket_size
se elige según el tamaño de línea de caché de la CPU del servidor. En particular, está destinado a ser lo más pequeño posible, para reducir las fallas de caché de la CPU , yaserver_name
que se debe buscar s en cada solicitud.En cuanto a por qué estás limitado a 14 caracteres en lugar de los 31 esperados, sospecho que hay una de dos posibilidades:
iconv
para solucionarlo.fuente
La longitud predeterminada debe determinarse automáticamente durante el inicio, dependiendo de los nombres de servidor usados, pero esto también debe actualizarse durante una
reload
operación. Vea si funciona sin configurar manualmente el tamaño del depósito pero con un reinicio en lugar de una recarga.Consulte http://nginx.org/en/docs/hash.html para saber cómo se determinan los tamaños de hash y http://nginx.org/en/docs/http/server_names.html para leer acerca de los hash utilizados para los nombres de servidores.
fuente