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»

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

3
задан 31 May 2017 в 01:15
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;
}
9
ответ дан 3 December 2019 в 04:52

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

1
ответ дан 3 December 2019 в 04:52

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

map_hash_bucket_size 128;
0
ответ дан 3 December 2019 в 04:52

Теги

Похожие вопросы