Como especificar diversas variáveis na diretiva map of nginx

5

Bem, eu tenho uma pergunta um pouco diferente desta : eu não Desejo mapear duas variáveis ao mesmo tempo, quero mapear uma variável usando duas outras como parâmetros.

Realmente li na documentação sobre a diretiva do mapa que:

Before version 0.9.0 only a single variable could be specified in the first parameter.

Então, como eu tenho o nginx 1.8, espero poder usar mais de uma única variável no primeiro parâmetro.

Isso me levou a pensar que eu poderia escrever algo como as duas últimas diretivas de mapa neste exemplo:

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

Mas isso não funciona ( nginx -t retorna um

invalid number of arguments in "map" directive

Então, como é possível especificar várias variáveis no primeiro parâmetro? Ou o que realmente significa a documentação, se eu a entendi mal?

    
por zezollo 28.02.2016 / 22:13

1 resposta

9

Você entendeu mal os documentos do nginx. Isso significa que, antes da versão 0.9, o primeiro argumento do map deve ser variável única e nada mais. Desde a versão 0.9.0, o primeiro argumento poderia ser qualquer string com qualquer número de variáveis para interpolar.

Veja como seu primeiro bloco poderia ser:

map "$bot:$request"      $np {
    default              "";
    "~^yes:"             "";
    "~*^:.*newproject"   "yes";
}
    
por 29.02.2016 / 08:20