web-dev-qa-db-fra.com

Comment spécifier plusieurs variables dans la directive sur la carte de nginx

Eh bien, j'ai ne question légèrement différente de celle-ci : Je ne veux pas mapper deux variables en même temps, je souhaite mapper une variable en utilisant deux autres paramètres.

En effet j'ai lu dans la documentation sur la directive sur la carte que:

Avant la version 0.9.0 Seule une seule variable pourrait être spécifiée dans le premier paramètre.

Ainsi, comme je possède Nginx 1.8, je m'attends à pouvoir utiliser plus d'une seule variable dans le premier paramètre.

Cela m'a amené à penser que je pouvais écrire quelque chose comme les deux dernières directives de la carte dans cet exemple:

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"   ""      "";
}

Mais ça ne marche pas (nginx -t retourne un

nombre d'arguments invalide dans la directive "Carte"

)

Alors, comment est-il possible de spécifier plusieurs variables dans le premier paramètre? Ou, qu'est-ce que cela signifie réellement la documentation, si je l'ai mal compris?

9
zezollo

Vous avez mal compris les documents de Nginx. Cela signifie qu'avant la version 0.9 premier argument du map doit être une variable unique et rien d'autre. Depuis la version 0.9.0 Premier argument pourrait être une chaîne avec n'importe quel nombre de variables pour interpoler.

Ici comment votre premier bloc pourrait ressembler à:

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