nginx의 맵 지시문에서 여러 변수를 지정하는 방법

글쎄, 나는 이것과 약간 다른 질문을 가지고 있습니다 : 나는 동시에 두 개의 변수를 매핑하고 싶지 않고 두 개의 다른 변수를 매개 변수로 사용하여 하나의 변수를 매핑하고 싶습니다.

실제로 지도 지시문 에 대한 설명서를 읽었 습니다 .

버전 0.9.0 이전에는 첫 번째 매개 변수에 단일 변수 만 지정할 수있었습니다.

따라서 nginx 1.8이 있으므로 첫 번째 매개 변수에서 단일 변수 이상을 사용할 수있을 것으로 기대합니다.

이 예제에서 두 개의 마지막 맵 지시문과 같은 것을 작성할 수 있다고 생각하게되었습니다.

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

그러나 작업 (하지 않는 nginx -t반환

“map”지시문에서 유효하지 않은 수의 인수

)

그렇다면 첫 번째 매개 변수에 여러 변수를 어떻게 지정할 수 있습니까? 아니면 내가 잘못 이해했을 때 실제로 문서를 의미하는 것은 무엇입니까?



답변

당신은 nginx의 문서를 오해했습니다. 버전 0.9 이전의 첫 번째 인수는 map단일 변수 여야하며 그 밖의 것은 없어야합니다. 버전 0.9.0부터 첫 번째 인수는 보간 할 변수 수가있는 문자열 일 수 있습니다.

첫 번째 블록은 다음과 같습니다.

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


답변