Мне нужно использовать карту перенаправления с довольно большим количеством правил (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;