Come specificare diverse variabili nella direttiva map di nginx


10

Bene, ho una domanda leggermente diversa da questa : non voglio mappare due variabili contemporaneamente, voglio mappare una variabile usando altre due come parametri.

In effetti ho letto nella documentazione relativa alla direttiva sulle mappe che:

Prima della versione 0.9.0 era possibile specificare solo una singola variabile nel primo parametro.

Quindi, dato che ho nginx 1.8, mi aspetto di poter usare più di una singola variabile nel primo parametro.

Questo mi ha portato a pensare che in questo esempio potrei scrivere qualcosa come le ultime due direttive della mappa:

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

Ma non funziona ( nginx -trestituisce a

numero di argomenti non valido nella direttiva "map"

)

Quindi, come è possibile specificare diverse variabili nel primo parametro? Oppure, cosa significa effettivamente la documentazione, se l'ho fraintesa?


Ho aggiunto una risposta alla domanda, ma in realtà questa domanda sembra un problema XY meta.stackexchange.com/questions/66377/what-is-the-xy-problem
Alexey Ten

Forse è un po '(e non li sapevo). Ma stavo davvero pensando che in realtà non fosse possibile e c'è qualcosa che mi manca da capire nella documentazione. Adesso è chiaro.
Zezollo,

Risposte:


20

Hai frainteso i documenti di Nginx. Significa che prima della versione 0.9 il primo argomento di mapdeve essere una variabile singola e nient'altro. Dalla versione 0.9.0 il primo argomento potrebbe essere qualsiasi stringa con un numero qualsiasi di variabili da interpolare.

Ecco come potrebbe apparire il tuo primo blocco:

map "$bot:$request"      $np {
    default              "";
    "~^yes:"             "";
    "~*^:.*newproject"   "yes";
}
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.