Nginx

Nginx:無法建構map_hash,你應該增加map_hash_bucket_size:64

  • November 19, 2018

我需要使用具有很多規則的重定向映射(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”來編輯實時配置並查看“未知指令”

那麼,應該如何設置這些值呢?不幸的是,官方文件中沒有太多細節。

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 {} 之外

引用自:https://serverfault.com/questions/853102