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

zez*_*llo 13 configuration nginx

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

事实上,我关于 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"   ""      "";
}
Run Code Online (Sandbox Code Playgroud)

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

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

)

那么,如何在第一个参数中指定多个变量呢?或者,如果我误解了文档,它的实际含义是什么?

Ale*_*Ten 27

您误解了 nginx 的文档。这意味着在 0.9 版本之前, the 的第一个参数map必须是单变量,没有别的。从 0.9.0 版本开始,第一个参数可以是带有任意数量要插入的变量的任何字符串。

这是您的第一个块的样子:

map "$bot:$request"      $np {
    default              "";
    "~^yes:"             "";
    "~*^:.*newproject"   "yes";
}
Run Code Online (Sandbox Code Playgroud)