내용으로 건너뛰기

CloudFront를 사용하여 요청을 특정 오리진으로 라우팅하려면 어떻게 해야 합니까?

3분 분량
0

다양한 유형의 요청을 특정 오리진 서버로 라우팅하도록 Amazon CloudFront 배포판을 구성하려고 합니다. URL 경로를 기반으로 각 요청을 적절한 오리진으로 보내고 싶습니다.

해결 방법

경로 패턴 정의

CloudFront 배포판을 만들캐시 동작을 정의합니다. 둘 이상을 정의하는 경우 각 동작에 고유한 경로 패턴이 있어야 합니다. 그러면 CloudFront에서 배포에 나열한 순서대로 요청 경로를 경로 패턴과 일치시킵니다.

다음 예는 경로 패턴이 관련 요청 경로와 어떻게 일치하는지 보여줍니다.

  • /images/*/images/cat.jpg /images/dog.png와 일치
  • /en/*/en/about/en/contact와 일치
  • /app1/*/app1/index.html과 일치하지만 /app1app2/index.html과는 불일치

중요:

  • 경로 패턴은 대소문자를 구분합니다. 예를 들어 /images/cat.jpg/Images/cat.jpg와 일치하지 않습니다.
  • CloudFront는 # 문자를 조각 식별자로 처리하며 경로 패턴 일치에 조각 식별자를 포함하지 않습니다. # 문자가 포함된 URL과 일치시키는 CloudFront 함수를 만듭니다.
  • CloudFront는 경로가 일치하기 전에 경로를 정규화합니다. 예를 들어 /path//file/path/ 패턴과 일치합니다.

여러 오리진 사용

기본적으로 캐시 동작의 각 경로 패턴에는 하나의 오리진만 연결할 수 있습니다.

경로 패턴이 동일한 요청을 여러 오리진으로 라우팅하려면 다음 단계를 완료하십시오.

  1. 쿼리 문자열 파라미터를 사용하여 오리진을 구분합니다. 예를 들어 /.jpg?origin=origin1/*.jpg?origin=origin2를 사용합니다.
  2. 동일한 경로 패턴에 사용하려는 각 오리진마다 별도의 CloudFront 배포판을 만듭니다.
  3. CloudFront Functions 또는 Lambda@Edge를 사용하여 요청을 검사하고 오리진으로 요청을 동적으로 라우팅하는 사용자 지정 코드를 작성합니다.

지리적 위치를 기반으로 요청 라우팅

CloudFront 함수를 사용하여 cloudfront-viewer-country 헤더를 검사하고 열람자의 지리적 위치에 따라 요청을 서로 다른 오리진으로 라우팅합니다.

다음 예제 코드는 특정 국가의 요청을 다른 캐시 동작으로 리디렉션하는 CloudFront 함수를 보여줍니다.

function handler(event) {
  var request = event.request;
  var headers = request.headers;
  var country = headers['cloudfront-viewer-country'];

  // List of country codes to route to the first origin
  var allowedCountries = ['US', 'CA'];

  // Create the new URI to redirect to
  var newUri = request.uri.replace('/api/', '/api-geo/');

  if (allowedCountries.includes(country.value)) {
    return request;
  } else {
    var response = {
      statusCode: 302,
      statusDescription: 'Found',
      headers: {
        location: {
          value: newUri
        }
      }
    };
    return response;
  }
}

이 함수는 열람자의 국가가 allowedCountries 목록에 있는지 확인합니다. 국가가 목록에 있는 경우 함수에서 요청이 /api/ 동작을 진행하도록 허용합니다. 국가가 목록에 없는 경우 함수에서 요청을 /api-geo/ 동작으로 리디렉션합니다. 리디렉션을 수행하기 위해 함수에서 새 URI를 만들고 302 리디렉션 응답을 반환합니다.

캐싱 문제 방지

기본적으로 CloudFront는 요청 URI와 특정 헤더를 기반으로 응답을 캐싱합니다. CloudFront Functions 또는 Lambda@Edge를 사용하여 요청 URI 또는 헤더를 오리진 도달 전에 수정하면 캐싱 불일치가 발생할 수 있습니다.

캐싱 문제를 방지하려면 다음 조치 중 하나를 취하십시오.

  • 오리진 도달 전에만 요청을 수정해야 하고 현재 캐싱 전략을 유지하려면 Lambda@Edge 함수를 사용하십시오. 오리진 요청 이벤트는 함수를 트리거해야 합니다. 요청 수정 로직을 Lambda@Edge 함수로 이동하는 것이 좋습니다. 함수는 캐시 조회 후 활성화된 오리진 요청 트리거에서 실행되어야 합니다. 그러면 열람자가 보낸 원래 요청을 기반으로 캐시 키가 지정됩니다.
  • 캐싱에 대한 제어를 강화하기 위해 특정 요청 속성을 기반으로 별도의 캐시 항목을 만들려면 사용자 지정 캐시 정책을 만드십시오. 각 요청마다 고유한 캐시 키를 사용하려면 캐시 키에 추가 요청 헤더나 쿼리 문자열을 포함하십시오.

캐싱 동작을 변경하는 경우 CloudFront에서 제공한 기존 캐시 파일을 제거하는 것이 좋습니다. 그러면 캐싱 동작 업데이트가 즉시 적용될 수 있습니다.

관련 정보

모든 배포 설정 참조

쿼리 문자열 파라미터를 기반으로 콘텐츠 캐시

주 수준의 지역 타겟팅에 Amazon CloudFront 지리적 위치 헤더 활용

AWS 공식업데이트됨 3달 전