Ich habe den folgenden virtuellen Host
server
{
server_name abc.example.com;
root /var/www/test/;
index index.html;
}
Beim Laufen nginx -s reload
bekomme ich folgende Fehlermeldung:
nginx: [emerg] konnte den server_names_hash nicht erstellen. Sie sollten den server_names_hash_bucket_size: 32 erhöhen
Gleiches gilt für jeden Servernamen mit 15 oder mehr Zeichen.
Wenn ich den Servernamen auf ab.example.com
(oder einen beliebigen Namen unter 15 Zeichen) setze, tritt das Problem nicht mehr auf.
Um dies zu beheben, habe ich Folgendes hinzugefügt /etc/nginx/nginx.conf
(es wurde vorher nicht definiert):
server_names_hash_bucket_size 64;
Die Einstellung auf 33 hat auch funktioniert, aber nicht auf 32.
Warum beträgt die Standardlänge für Servername maximal 14 Zeichen?
Wird dieses Limit durch die Standardeinstellungen von nginx oder durch das System vorgegeben, auf dem es ausgeführt wird?
Wie wirkt sich ein Servername von 15 auf die maximale Hash-Bucket-Größe aus? (Auf dem System sind nur 4 virtuelle Hosts definiert.)
quelle
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
Antworten:
Dieser Fehler tritt auf, wenn das
server_name
ist zu groß in den Hash - Behältern zu passen .Der Standardwert für
server_names_hash_bucket_size
wird in Abhängigkeit von der CPU-Cache-Zeilengröße des Servers ausgewählt. Insbesondere soll es so klein wie möglich sein, um CPU-Cache-Ausfälle zu reduzieren , daserver_name
s bei jeder Anfrage nachgeschlagen werden muss.Ich vermute eine von zwei Möglichkeiten, warum Sie auf 14 statt der erwarteten 31 Zeichen beschränkt sind:
iconv
, um es zu beheben.quelle
Die Standardlänge sollte beim Start automatisch festgelegt werden, abhängig von den verwendeten Servernamen, dies sollte jedoch auch während eines
reload
Vorgangs aktualisiert werden. Überprüfen Sie, ob dies funktioniert, ohne die Bucket-Größe manuell festzulegen, jedoch mit einem Neustart anstelle eines erneuten Ladens.Unter http://nginx.org/en/docs/hash.html erfahren Sie, wie Hash-Größen ermittelt werden, und unter http://nginx.org/en/docs/http/server_names.html, wie Hashes für Servernamen verwendet werden.
quelle