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


10

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

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

버전 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"지시문에서 유효하지 않은 수의 인수

)

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


질문에 대한 답변을 추가했지만 실제로이 질문은 XY 문제 meta.stackexchange.com/questions/66377/what-is-the-xy-problem
Alexey Ten

어쩌면 그것은 일종의 (그리고 나는 그들에 대해 몰랐습니다). 그러나 나는 그것이 실제로 불가능하다는 것을 정말로 생각하고 있었고 문서에서 이해할 수없는 것이 있습니다. 지금은 분명하다.
zezollo

답변:


20

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

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

map "$bot:$request"      $np {
    default              "";
    "~^yes:"             "";
    "~*^:.*newproject"   "yes";
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.