J'ai l'hôte virtuel suivant
server
{
server_name abc.example.com;
root /var/www/test/;
index index.html;
}
Lors de l'exécution, nginx -s reload
j'obtiens l'erreur suivante:
nginx: [Emerg] n'a pas pu construire le server_names_hash, vous devez augmenter server_names_hash_bucket_size: 32
Il en va de même pour tout nom_serveur comportant 15 caractères ou plus.
Si je mets le nom_serveur ab.example.com
(ou tout nom de moins de 15 caractères), le problème cesse de se manifester.
Pour résoudre ce problème, j'ai ajouté ce qui suit /etc/nginx/nginx.conf
(il n'a pas été défini auparavant):
server_names_hash_bucket_size 64;
La définition de 33 a également fonctionné, mais pas 32.
Pourquoi la longueur maximale par défaut est-elle de 14 caractères pour nom_serveur?
Cette limite est-elle imposée par les paramètres par défaut de nginx ou par le système sur lequel il fonctionne?
Comment un nom_serveur de 15 affecte-t-il la taille maximale du compartiment de hachage? (il n'y a que 4 hôtes virtuels définis sur le système)
la source
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
Réponses:
Cette erreur se produit lorsque le
server_name
est trop grand pour tenir dans le compartiment de hachage .La valeur par défaut pour
server_names_hash_bucket_size
est choisie en fonction de la taille de la ligne de cache du processeur du serveur. En particulier, il est censé être aussi petit que possible, pour réduire les erreurs de cache du processeur , carserver_name
s doit être recherché à chaque demande.Quant à savoir pourquoi vous êtes limité à 14 caractères au lieu des 31 attendus, je soupçonne l'une des deux possibilités:
iconv
pour le réparer.la source
La longueur par défaut doit être déterminée automatiquement au démarrage, en fonction des noms de serveur utilisés, mais elle doit également être mise à jour lors d'une
reload
opération. Vérifiez si cela fonctionne sans définir manuellement la taille du compartiment mais avec un redémarrage au lieu d'un rechargement.Voir http://nginx.org/en/docs/hash.html pour savoir comment les tailles de hachage sont déterminées et http://nginx.org/en/docs/http/server_names.html pour en savoir plus sur les hachages utilisés pour les noms de serveur.
la source