Bem, eu tenho uma pergunta um pouco diferente desta : não quero mapear duas variáveis ao mesmo tempo, quero mapear uma variável usando duas outras como parâmetros.
Na verdade, li na documentação sobre a diretiva de mapa que:
Antes da versão 0.9.0, apenas uma única variável podia ser especificada no primeiro parâmetro.
Portanto, como 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 não funciona ( nginx -t
retorna um
número inválido de argumentos na diretiva "map"
)
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?
fonte
Respostas:
Você não entendeu 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 pode ser qualquer string com qualquer número de variáveis para interpolar.Aqui está como seu primeiro bloco pode ser:
fonte