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;