web-dev-qa-db-ja.com

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」を追加してライブ構成を編集していることを確認し、「不明なディレクティブ」を確認しました

では、これらの値はどのように設定する必要がありますか?詳細はあまりありません 公式ドキュメント内 残念ながら。

4
Putnik

map_hash_max_sizeおよびmap_hash_bucket_sizehttpコンテキスト内、つまりmapディレクティブの外にある必要があります。

map_hash_max_size 262144;
map_hash_bucket_size 262144;
map $uri $new_uri {
    include /etc/nginx/conf.d/redirects.map;
}
10
Alexey Ten

私はそれをhttp {}の上に置いたところ、うまくいきました。 httpの外側に置かないでください{}

1
Kevin Nguyen

メイン構成ファイル(/etc/nginx/nginx.conf)のhttpブロックの先頭に追加します。

map_hash_bucket_size 128;
0
Krauser