Мне нужно использовать карту перенаправления с довольно большим количеством правил (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
в основном файле конфигурации ( /etc/nginx/nginx.conf
):
map_hash_bucket_size 128;