nginxのmapディレクティブでいくつかの変数を指定する方法


10

さて、これとは少し異なる質問があります。2つの変数を同時にマップするのではなく、他の2つをパラメーターとして使用して1つの変数をマップしたいのです。

確かに私はマップディレクティブに関するドキュメントを読みました

バージョン0.9.0より前では、最初のパラメーターで指定できる変数は1つだけでした。

したがって、私はnginx 1.8を持っているので、最初のパラメーターで複数の変数を使用できると期待しています。

これにより、この例では最後の2つのマップディレクティブのようなものを書くことができると思いました。

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」ディレクティブの引数の数が無効です

それでは、最初のパラメータでいくつかの変数を指定することはどのように可能ですか?または、ドキュメントを誤解した場合、実際にはドキュメントはどういう意味ですか?


質問への回答を追加しましたが、実際には、この質問はXY問題meta.stackexchange.com/questions/66377/what-is-the-xy-problem
Alexey Ten

多分それは(そして私はそれらについて知りませんでした)一種です。しかし、それは実際には不可能だと本当に思っていたので、ドキュメントで理解できないことがありました。はっきりしている。
zezollo 2016

回答:


20

nginxのドキュメントを誤解しています。つまり、バージョン0.9より前では、の最初の引数はmap単一の変数でなければならず、それ以外のものはありません。バージョン0.9.0以降、最初の引数は、補間する変数の数が任意の文字列になる可能性があります。

最初のブロックは次のようになります。

map "$bot:$request"      $np {
    default              "";
    "~^yes:"             "";
    "~*^:.*newproject"   "yes";
}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.