我需要使用具有相当多规则的重定向映射(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;
}
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;