如何在nginx的map指令中指定几个变量

如何在nginx的map指令中指定几个变量

嗯,我有与这个问题略有不同:我不想同时映射两个变量,我想使用另外两个变量作为参数来映射一个变量。

我确实读过在文档中关于 map 指令:

在 0.9.0 版本之前,第一个参数只能指定一个变量。

因此,由于我有 nginx 1.8,我希望能够在第一个参数中使用多个变量。

这让我想到我可以编写类似于本例中最后两个 map 指令的内容:

map $http_user_agent $bot {
    default         "";
    "~*Googlebot"   "yes";
    "~*MJ12bot"     "yes";
    "~*bingbot"     "yes";
    etc.
}

map $request        $bot    $np {
    default         ""      "";
    default         "yes"   "";
    "~*newproject"  ""      "yes";
    "~*newproject"  "yes"   "";
}

map $bot    $np     $regular {
    ""      ""      "yes";
    ""      "yes"   "";
    "yes"   ""      "";
}

但它不起作用(nginx -t返回一个

“map”指令中的参数数量无效

那么,如何在第一个参数中指定多个变量?或者,如果我误解了,文档实际上是什么意思?

答案1

您误解了 nginx 的文档。这意味着在 0.9 版本之前,第一个参数map必须是单个变量,不能是其他变量。从 0.9.0 版本开始,第一个参数可以是任意字符串,并且可以插入任意数量的变量。

你的第一个区块可能如下所示:

map "$bot:$request"      $np {
    default              "";
    "~^yes:"             "";
    "~*^:.*newproject"   "yes";
}

相关内容