Mam następujący wirtualny host
server
{
server_name abc.example.com;
root /var/www/test/;
index index.html;
}
Podczas działania nginx -s reload
pojawia się następujący błąd:
nginx: [emerg] nie mógł zbudować server_names_hash, powinieneś zwiększyć server_names_hash_bucket_size: 32
To samo dzieje się z dowolną nazwą serwera, która ma 15 lub więcej znaków.
Jeśli ustawię nazwę serwera na ab.example.com
(lub dowolną nazwę poniżej 15 znaków), problem przestanie się pojawiać.
Aby to naprawić, dodałem następujące elementy /etc/nginx/nginx.conf
(nie było to wcześniej zdefiniowane):
server_names_hash_bucket_size 64;
Ustawienie na 33 również działało, ale nie 32.
Dlaczego domyślna maksymalna długość to 14 znaków dla nazwa_serwera?
Czy ten limit jest narzucony przez domyślne ustawienia nginx czy przez system, na którym działa?
Jak nazwa_serwera 15 wpływa na maksymalny rozmiar segmentu mieszania? (w systemie są zdefiniowane tylko 4 wirtualne hosty)
źródło
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
Odpowiedzi:
Ten błąd występuje, gdy wartość
server_name
jest zbyt duża, aby zmieścić się w segmencie mieszania .Domyślna wartość
server_names_hash_bucket_size
jest wybierana w zależności od rozmiaru linii pamięci podręcznej procesora na serwerze. W szczególności ma on być tak mały, jak to możliwe, aby zmniejszyć liczbę braków pamięci podręcznej procesora , ponieważserver_name
należy sprawdzać s na każde żądanie.Jeśli chodzi o to, dlaczego jesteś ograniczony do 14 znaków zamiast oczekiwanych 31, podejrzewam jedną z dwóch możliwości:
iconv
aby to naprawić.źródło
Domyślna długość powinna być automatycznie ustalana podczas uruchamiania, w zależności od używanych nazw serwerów, ale należy ją również aktualizować podczas
reload
operacji. Sprawdź, czy działa bez ręcznego ustawiania rozmiaru segmentu, ale z restartem zamiast przeładowania.Zobacz http://nginx.org/en/docs/hash.html, aby dowiedzieć się, jak określa się rozmiary skrótów, i http://nginx.org/en/docs/http/server_names.html, aby przeczytać o skrótach używanych dla nazw serwerów.
źródło