Nginx - emerg - could not build map hash - you should increase map hash bucket size 64
Материал из Wiki - Iphoster - the best ever hosting and support. 2005 - 2025
Nginx - emerg - could not build map hash - you should increase map hash bucket size 64
Ошибка:
nginx: [emerg] could not build map_hash, you should increase map_hash_bucket_size: 64
и не запускается nginx.
Решение - прямо перед map $ssl_preread_server_name $backend {
добавить строки:
map_hash_bucket_size 256; map_hash_max_size 4096;
и перезапустить nginx.
Если добавить в http {} - то не сработает
Автоматизировано через sed:
# sed -i '1i map_hash_bucket_size 256;\nmap_hash_max_size 4096;' /etc/nginx/stream-enabled/stream.conf # systemctl restart nginx
Мат.часть:
Параметр map_hash_bucket_size в Nginx отвечает за размер хеш-таблицы, которая используется в директиве map, server_name, types, и других, где нужны быстрые сопоставления по ключу. Подробно: map — часто используется для определения значения переменной на основе значений других переменных (например, IP-адресов, хостов и т.п.). При большом количестве ключей (доменов, IP и т.д.), nginx использует хеш-таблицу. Эта хеш-таблица разбивается на "bucket'ы" — "корзины", и параметр map_hash_bucket_size управляет размером одной такой корзины. Почему важен map_hash_bucket_size: Если у вас много или длинных ключей (например, длинные доменные имена), Nginx может выдать ошибку: could not build the map_hash, you should increase map_hash_bucket_size Это означает, что ключи не влезают в текущий размер корзины. Какой размер ставить? По умолчанию: 32 или 64 байта (зависит от архитектуры). Часто для длинных доменных имен ставят: map_hash_bucket_size 128;