Cara menentukan beberapa variabel dalam arahan peta nginx

10

Yah saya punya pertanyaan yang sedikit berbeda dari yang ini : Saya tidak ingin memetakan dua variabel secara bersamaan, saya ingin memetakan satu variabel menggunakan dua lainnya sebagai parameter.

Memang saya telah membaca di dokumentasi tentang arahan peta itu:

Sebelum versi 0.9.0 hanya satu variabel yang dapat ditentukan dalam parameter pertama.

Jadi, karena saya memiliki nginx 1.8, saya berharap dapat menggunakan lebih dari satu variabel pada parameter pertama.

Ini membuat saya berpikir bahwa saya bisa menulis sesuatu seperti dua arahan peta terakhir dalam contoh ini:

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

Tetapi tidak berhasil ( nginx -tmengembalikan a

jumlah argumen dalam arahan "peta" tidak valid

)

Jadi, bagaimana mungkin untuk menentukan beberapa variabel di parameter pertama? Atau, apa yang sebenarnya dimaksud dengan dokumentasi, jika saya salah paham?

zezollo
sumber
Saya telah menambahkan jawaban untuk pertanyaan itu, tetapi sebenarnya pertanyaan ini terlihat seperti meta.stackexchange.com/questions/66377/what-is-the-xy-problem
Alexey Ten
Mungkin agak (dan saya tidak tahu tentang mereka). Tapi saya benar-benar berpikir itu sebenarnya tidak mungkin dan ada sesuatu yang saya rindukan untuk pahami dalam dokumentasi. Sudah jelas sekarang.
zezollo

Jawaban:

20

Anda salah mengerti dokumen nginx. Ini berarti bahwa sebelum versi 0.9 argumen pertama mapharus variabel tunggal dan tidak ada yang lain. Karena versi 0.9.0 argumen pertama dapat berupa string dengan sejumlah variabel apa pun untuk diinterpolasi.

Di sini terlihat seperti bagaimana blok pertama Anda:

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