Nginx:无法构建 map_hash,您应该增加 map_hash_bucket_size:64

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”确保我正在编辑实时配置,并看到“未知指令”

那么,这些值应该如何设置?没有太多细节在官方文档中, 很遗憾。

答案1

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;
}

答案2

我把它放在 http {} 的顶部,这样就成功了。不要把它放在 http {} 外面

答案3

http在主配置文件的块顶部添加( /etc/nginx/nginx.conf):

map_hash_bucket_size 128;

相关内容