nginx의 한 위치에서 다른 위치로 이동할 수 있나요?

nginx의 한 위치에서 다른 위치로 이동할 수 있나요?

나는 다음과 같은 것을 달성하려고 노력하고 있습니다.

location /location1/{
    if ($arg_api_key = a_valid_api_key) {
         proxy_pass http://localhost:8080;
    }
    # else jump to location2
}
location /location2/{
    # a lot of validation code here
}

nginx에서는 어떻게 하나요? 아니면 그것을 처리하는 더 좋은 방법이 있습니까?

답변1

먼저, 이것을 기억하세요만약에 악하다rewrite또는 return내부를 제외하고는 아무것도 넣지 마십시오 if. 요청을 처리하는 데 사용되는 위치를 사용 error_page하고 변경하는 것이 제안된 해결 방법입니다.return

처럼여기에 이미 답변했습니다, nginx에서 위치 설정을 재사용하는 방법은 해당 설정을 별도의 파일과 블록 include의 해당 파일 로 이동하는 것입니다 location.

이러한 솔루션을 결합하면 다음과 같은 결과를 얻을 수 있습니다.

/etc/nginx/validation_code.conf

# a lot of validation code here

주요 구성

location /location1/ {
    error_page 418 = @proxy;
    recursive_error_pages on;
    if ($arg_api_key = a_valid_api_key) {
        return 418;
    }
    include /etc/nginx/validation_code.conf;
}

location /location2/ {
    include /etc/nginx/validation_code.conf;
}

location @proxy {
    proxy_pass http://localhost:8080;
}

별도의 파일을 만드는 대신 유효성 검사 코드에 이름이 지정된 위치를 사용하는 것도 고려해 볼 수 있습니다. 그러나 해당 명명된 위치로 전환하려면 몇 가지 트릭이 필요합니다. 예를 들어 다른 error_page/ return쌍 또는 이와 유사한 것

    try_files /nonexistent @validation

관련 정보