이 페이지에서는 Cloud CDN을 사용하여 오래되고 만료된 콘텐츠를 제공하는 방법을 설명합니다. 오래된 콘텐츠를 제공하면 원본 서버에 연결할 수 없거나 Cloud CDN에 오류가 반환되는 경우 Google의 전역 캐시가 콘텐츠를 계속 제공할 수 있습니다.
이렇게 하는 이유는 다음과 같습니다.
- 사용자에게 오류를 반환하는 것보다 사용자에게 오래된 콘텐츠를 제공하는 것이 더 나을 수 있습니다.
- 오래된 콘텐츠를 제공하면 캐시가 방금 만료된 콘텐츠에 대한 요청을 받은 경우 지연 시간을 피할 수 있습니다. 캐시는 백엔드에 대한 동기식 재검증을 기다릴 필요 없이 방금 만료된 비활성 콘텐츠를 제공하며 별도의 재검증을 트리거합니다.
이 동작을 사용 설정하려면 백엔드가 응답 Cache-Control
헤더에 stale-while-revalidate
지시문을 지정하면 됩니다. 그러면 Cloud CDN에서 캐시 항목 만료 시간이 지난 후 지정된 시간(초) 동안 해당 캐시에서 콘텐츠를 제공합니다(사용 가능한 경우). 비동기적으로 Cloud CDN은 원본에서 콘텐츠를 다시 검증합니다.
Cloud CDN은 cdnPolicy.serveWhileStale
설정으로 사용자를 대신하여 이 기능을 사용 설정합니다. 이 설정은 응답이 만료된 후 Cloud CDN이 오래된 버전을 계속 제공할 수 있는 시간을 나타냅니다. 응답에 달리 지정되지 않은 경우 86400s
(1일)입니다.
Cloud CDN은 stale-if-error
지시문을 지원하지 않습니다. 이 지시문은 백엔드의 동기식 유효성 검사가 특정 오류 상태 코드와 함께 실패하지 않는 한 비활성 콘텐츠를 제공하지 않도록 캐시에 지시합니다.
기본값, 최솟값, 최댓값은 다음과 같습니다.
- 기본값: 86,400초(1일)
- 최소: 0초(기능 사용 중지)
- 최대: 604,800초(1주)
오래된 콘텐츠는 max-age
, s-maxage
또는 Expires
헤더에서 정의된 캐시 항목 만료 시간을 지난 특정 한도 시간에 도달할 때까지 제공됩니다. 자세한 내용은 만료 시간 및 유효성 검사 요청을 참조하세요
Cloud CDN 에지 캐시에 오래된 상태인 제공할 객체의 캐시된 사본이 없거나 객체가 최대 오래된 콘텐츠 TTL에 도달하면 Cloud CDN은 원본으로 콘텐츠를 동기식으로 재검증합니다. 그 시점에 원본이 오류를 반환하면 Cloud CDN은 원본 오류를 반환합니다.
로깅 및 사용자 에이전트
Cloud CDN에서 수행된 비동기식 요청은 비활성 콘텐츠를 제공하지 않을 때 발생하는 일반적인 재검증 요청과 마찬가지로 원본 서버에 나타납니다. 예외적으로 Cloud-CDN-Google
이 포함된 User-Agent
헤더로 태그가 지정됩니다.
비동기식 요청도 Cloud Logging에 별도로 로깅되므로 비활성 요청되는 사용자 요청은 두 가지 로그 항목을 생성합니다. 첫 번째는 실제로 사용자에게 제공되는 콘텐츠에 대한 것이고 다른 하나는 원본으로의 재검증 요청에 대한 것입니다. Cloud CDN은 동기식 재검증과 마찬가지로 특정 상황에서 조건부 요청을 보내거나 무조건적으로 콘텐츠를 다시 요청할 수 있습니다. 두 경우 모두 Cloud Logging에 로깅된 응답 코드는 Cloud CDN으로의 원본 요청에 해당합니다. 예를 들면 비조건부 요청인 경우 200 OK
이거나 사용자의 원본 응답이 조건부인 경우 304 Not Modified
입니다.
클라이언트 max-stale
요청 지시문
클라이언트는 max-stale
캐시 제어 지시문을 지정하여 오래된 콘텐츠 제공 서비스 시간이 더 짧도록 요청할 수 있습니다. 지정한 경우 이 지시문은 클라이언트가 허용하는 오래된 정도를 제어합니다.
캐시된 콘텐츠가 클라이언트의 max-stale
값보다 오래된 경우 Cloud CDN은 제공 전에 콘텐츠를 재검증합니다.
클라이언트는 원본의 serve-while-stale
구성 옵션 및 stale-while-revalidate
캐시 제어 지시문으로 구성된 값보다 더 큰 max-stale
값을 요청할 수 없습니다.
시작하기 전에
캐시 모드 및 정적 콘텐츠를 읽어보세요.
Cloud CDN이 사용 설정되어 있는지 확인합니다. 자세한 내용은 Cloud CDN 사용을 참조하세요.
필요한 경우 Google Cloud CLI를 최신 버전으로 업데이트합니다.
gcloud components update
재검증 중에 오래된 콘텐츠 제공
콘솔
- Google Cloud 콘솔에서 부하 분산 페이지로 이동합니다.
- 외부 애플리케이션 부하 분산기 이름을 클릭합니다.
- 수정을 클릭합니다.
- 백엔드 구성에서 백엔드를 선택한 후 수정을 클릭합니다.
- Cloud CDN 사용 설정이 선택되어 있는지 확인합니다.
- 창 하단에서 고급 구성을 클릭합니다.
- 추가 CDN 옵션에서 오래된 경우에도 제공에 다음 옵션 중 하나를 선택합니다.
- 1분
- 5분
- 10분
- 30분
- 1일(권장)
- 7일
- 업데이트를 클릭합니다.
- 업데이트를 다시 클릭합니다.
gcloud
백엔드 버킷의 경우 --serve-while-stale
플래그와 함께 gcloud compute backend-buckets
create
명령어 또는 gcloud compute backend-buckets
update
명령어를 사용합니다.
백엔드 서비스의 경우 --serve-while-stale
플래그와 함께 gcloud compute backend-services
create
명령어 또는 gcloud compute backend-services
update
명령어를 사용합니다.
gcloud compute backend-buckets (create | update) BACKEND_BUCKET_NAME --serve-while-stale=SECONDS
gcloud compute backend-services (create | update) BACKEND_SERVICE_NAME --serve-while-stale=SECONDS
예를 들면 다음과 같습니다.
gcloud compute backend-services update my-backend-service --serve-while-stale=180s
API
백엔드 버킷의 경우 Method: backendBuckets.insert
또는 Method: backendBuckets.update
API 호출을 사용합니다.
백엔드 서비스의 경우 Method: backendServices.insert
또는 Method: backendServices.update
API 호출을 사용합니다.
다음 API 호출 중 하나를 사용합니다.
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendBuckets PUT https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendBuckets/BACKEND_BUCKET POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices PUT https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/BACKEND_SERVICE
JSON 요청 본문에 다음 스니펫을 추가합니다.
"cdnPolicy": { "serveWhileStale": SECONDS }
오래된 콘텐츠 제공 사용 중지
콘솔
- Google Cloud 콘솔에서 부하 분산 페이지로 이동합니다.
- 외부 애플리케이션 부하 분산기 이름을 클릭합니다.
- 수정을 클릭합니다.
- 백엔드 구성에서 백엔드를 선택한 후 수정을 클릭합니다.
- Cloud CDN 사용 설정이 선택되지 않았는지 확인합니다.
- 창 하단에서 고급 구성을 클릭합니다.
- 추가 CDN 옵션 > 오래된 경우에도 제공에서 오래된 경우에는 제공 사용 중지를 선택합니다.
- 업데이트를 클릭합니다.
- 업데이트를 다시 클릭합니다.
gcloud
백엔드 버킷의 경우 0
값으로 설정된 --serve-while-stale
플래그와 함께 gcloud compute backend-buckets
create
또는 gcloud compute backend-buckets
update
명령어를 사용합니다.
백엔드 서비스의 경우 gcloud compute backend-services
create
명령어 또는 gcloud compute backend-services
update
명령어를 --serve-while-stale
플래그 값(0
으로 설정)과 함께 사용합니다.
gcloud compute backend-services (create | update) (BACKEND_SERVICE_NAME | BACKEND_BUCKET_NAME) --serve-while-stale=0
API
백엔드 버킷의 경우 Method: backendBuckets.insert
또는 Method: backendBuckets.update
API 호출을 사용합니다.
백엔드 서비스의 경우 Method: backendServices.insert
또는 Method: backendServices.update
API 호출을 사용합니다.
다음 API 호출 중 하나를 사용합니다.
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendBuckets PUT https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendBuckets/BACKEND_BUCKET POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices PUT https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/BACKEND_SERVICE
JSON 요청 본문에 다음 스니펫을 추가합니다.
"cdnPolicy": { "serveWhileStale": 0 }