У меня следующий виртуальный хост
server
{
server_name abc.example.com;
root /var/www/test/;
index index.html;
}
При беге nginx -s reload
Я получаю следующую ошибку:
nginx: [Emerg] не смог построить server_names_hash, вам следует увеличить server_names_hash_bucket_size: 32
То же самое происходит с любым server_name, содержащим 15 или более символов.
Если я установлю server_name на ab.example.com
(или любое имя менее 15 символов) проблема перестает проявляться.
Чтобы исправить это, я добавил следующее в /etc/nginx/nginx.conf
(раньше это не было определено):
server_names_hash_bucket_size 64;
Установка 33 сработала, но не 32.
Почему максимальная длина по умолчанию для server_name составляет 14 символов?
Это ограничение накладывается настройками nginx по умолчанию или системой, в которой он работает?
Как server_name, равный 15, влияет на максимальный размер хэш-корзины? (в системе определено всего 4 виртуальных хоста)
Эта ошибка возникает, когда server_name
является слишком большой, чтобы поместиться в хеш-ведро.
По умолчанию для server_names_hash_bucket_size
выбирается в зависимости от размера строки кэша ЦП сервера. В частности, он должен быть как можно меньше, для уменьшения промахов в кэше ЦП, так как server_name
s необходимо искать по каждому запросу.
Что касается того, почему вы ограничены 14 символами вместо ожидаемых 31, я подозреваю одну из двух возможностей:
iconv
Исправить это.Длина по умолчанию должна автоматически определяться во время запуска, в зависимости от используемых имен серверов, но это также должно быть обновлено во время reload
операция. Посмотрите, работает ли он без ручной установки размера корзины, но с перезапуском вместо перезагрузки.
Видеть http://nginx.org/en/docs/hash.html чтобы узнать, как определяются размеры хэшей и http://nginx.org/en/docs/http/server_names.html чтобы прочитать о хэшах, используемых для имен серверов.