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" и увидев "неизвестную директиву"

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

3 ответа

Решение

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;
Другие вопросы по тегам