Maxim Dounin
May 10, 2020 01:30PM
Hello!

On Thu, May 07, 2020 at 05:50:55PM +0300, Gena Makhomed wrote:

> Здравствуйте, All!
>
> nginx version: nginx/1.17.10 из официального репозитория.
>
> Почему nginx время от времени ни с того ни с сего глючит при релоаде
> конфигурации и остается работать со старой конфигурацией
> при добавлении нового хоста в конфиг?
>
> Уже в который раз наступаю на эти грабли.
>
> При выполнении команды nginx -t он выдает такие ошибки:
>
> nginx: [warn] could not build optimal server_names_hash, you should increase
> either server_names_hash_max_size: 512 or server_names_hash_bucket_size: 64;
> ignoring server_names_hash_bucket_size

Этот warning означает, что построить оптимальный хэш в рамках
заданных параметров не удалось, поэтому хэш будет построен без
учёта server_names_hash_bucket_size. Возможно, результирующий хэш
будет не оптимален, поэтому - warning.

> nginx: [emerg] could not build server_names_hash, you should increase
> server_names_hash_bucket_size: 64

А это ошибка означает, что в хэш попытались положить элемент
длиннее заданного server_names_hash_bucket_size, что выглядит как
ошибка в конфигурации. Если это не ошибка, и вы действительно
хотили такое положить в хэш - это можно сделать, явно увеличив
server_names_hash_bucket_size.

> nginx: configuration file /etc/nginx/nginx.conf test failed
>
> или такие:
>
> nginx: [emerg] could not build server_names_hash, you should increase
> server_names_hash_bucket_size: 64
> nginx: configuration file /etc/nginx/nginx.conf test failed
>
> и т.п.
>
> Почему нельзя его научить самостоятельно подбирать нужные ему размеры?
>
> Например, так:
>
> server_names_hash_max_size auto;
> server_names_hash_bucket_size auto;
>
> и забыть про эти глюки как про страшный сон?
>
> Документацию http://nginx.org/ru/docs/hash.html читал,
> но так и не понял, почему nginx не может это делать самостоятельно,
> пусть даже ценой некоторой небольшой задержки пре релоаде конфигурации.
>
> Небольшая задержка при релоаде конфигурации имхо - это гораздо лучше,
> чем выдавать ошибку и в случайные и непредсказуемые моменты времени
> полностью игнорировать добавление нового хоста в конфиг.

Проблем тут две:

- "Небольшая задержка" - это, скажем так, оптимистичный взгляд на
проблему. Скажем, один перебор всех возможных значений
количества bucket'ов - то есть, фактически, построение хэша с
большим значением server_names_hash_max_size - может легко
занимать минуты процессорного времени.

- Нет априорного ответа на вопрос "а что оптимальнее: сделать
больше bucket'ов или поднять размер одного bucket'а".

Поэтому сейчас всё работает так, что в отсутствии явных ошибок
конфигурации (как в случае выше - имён в конфиге, превышающих по
длине заданный размер bucket_size) - хэш всегда строится, а
информация о его возможной неоптимальности пишется в лог. Если же
в конфиге есть явные ошибки - то о них явно же и сообщается.

--
Maxim Dounin
http://mdounin.ru/
_______________________________________________
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru
Subject Author Posted

could not build server_names_hash, you should increase server_names_hash_bucket_size: 64

Gena Makhomed May 07, 2020 10:52AM

Re: could not build server_names_hash, you should increase server_names_hash_bucket_size: 64

Maxim Dounin May 10, 2020 01:30PM



Sorry, only registered users may post in this forum.

Click here to login

Online Users

Guests: 85
Record Number of Users: 6 on February 13, 2018
Record Number of Guests: 421 on December 02, 2018
Powered by nginx      Powered by FreeBSD      PHP Powered      Powered by MariaDB      ipv6 ready