Назад | Перейти на главную страницу

Nginx: не удалось собрать map_hash, вам следует увеличить map_hash_bucket_size: 64

Мне нужно использовать карту перенаправления с довольно большим количеством правил (2k + строк, размер файла ~ 200K)

У меня в nginx следующие настройки:

map $uri $new_uri {
        include /etc/nginx/conf.d/redirects.map;
}

server {
        listen 80 default_server;
        listen [::]:80 default_server;

        # redirects
        if ($new_uri) {
                rewrite ^ $new_uri permanent;
        }

как описано Вот и нашел Вот. Проблема: configtest не работает:

nginx: [emerg] could not build map_hash, you should increase map_hash_bucket_size: 64

Я попытался увеличить map_hash_max_size и map_hash_bucket_size до довольно сумасшедших значений:

map $uri $new_uri {
        map_hash_max_size 262144;
        map_hash_bucket_size 262144;
        include /etc/nginx/conf.d/redirects.map;
}

но по-прежнему имеет ту же ошибку (заканчивающуюся точно на "64"). Я выбрал эти значения так, чтобы они были больше размера файла. Я убедился, что редактирую живую конфигурацию, добавив «blabla» и увидев «unknown directive»

Итак, как установить эти значения? Подробностей не так много в официальном документе, К сожалению.

map_hash_max_size и map_hash_bucket_size должен быть в http контекст, т.е. вне map директива.

map_hash_max_size 262144;
map_hash_bucket_size 262144;
map $uri $new_uri {
    include /etc/nginx/conf.d/redirects.map;
}

Я поместил его поверх http {}, и он сработал. Не размещайте его за пределами http {}

Добавить в начало http блок в основном файле конфигурации (/etc/nginx/nginx.conf):

map_hash_bucket_size 128;