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