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;