かなり多くのルールでリダイレクトマップを使用する必要があります(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の外側に置かないでください{}
メイン構成ファイル(/etc/nginx/nginx.conf
)のhttp
ブロックの先頭に追加します。
map_hash_bucket_size 128;