캐시 및 캐시 삭제
엣지 캐시, 브라우저 캐시, 캐시 키, 네거티브 캐시를 구성하고 URL, 와일드카드 또는 사이트 전체를 기준으로 캐시를 삭제합니다.
캐시 설정은 사이트 상세 페이지(/cdn/domains/<domain>/cache)의 캐시 탭에 있습니다. 설정은 사이트의 모든 호스트 이름에 적용됩니다. 변경 후 하단의 설정 저장을 클릭합니다. 새 콘텐츠를 즉시 반영하려면 오른쪽 상단의 캐시 삭제를 사용합니다.
엣지 캐시
| 설정 | 설명 |
|---|---|
| 엣지 캐시 | 자동: 원본 서버의 응답 헤더에 따라 캐시합니다. 활성화: 캐시를 활성화합니다. 비활성화: 엣지에 아무것도 캐시하지 않습니다. |
| 원본 서버 장애 시 만료된 캐시 반환 | 원본 서버에서 시간 초과가 발생하거나 500/502/503/504를 반환하면 엣지는 오류 페이지 대신 만료된 캐시 사본을 제공합니다. 기본적으로 활성화되어 있습니다. |
| 캐시 시간 모드 | 캐시 유효 기간을 결정하는 방식입니다. 다음 표를 참조하십시오. |
| 캐시 시간(초) | TTL 모드에서 사용하는 설정값입니다. 바로가기 버튼을 누르면 1 hour, 1 day 또는 7 days가 입력됩니다. |
캐시 TTL 모드:
| 모드 | 동작 |
|---|---|
| 원본 서버 설정 또는 기본값 따름 | 원본 서버의 Cache-Control / Expires 헤더에 지정된 유효 기간을 사용합니다. 원본 서버에서 제공하지 않으면 설정값을 사용합니다. |
| 고정 | 원본 서버의 값을 무시하고 항상 설정값을 사용합니다. |
| 원본 서버 설정 따름 | 원본 서버를 엄격하게 따릅니다. 원본 서버에서 응답을 캐시 가능으로 표시하지 않으면 캐시하지 않습니다. |
| 최솟값 사용 / 최댓값 사용 | 원본 서버의 유효 기간과 설정값 중 더 작거나 더 큰 값을 사용합니다. 원본 서버에서 제공하지 않으면 설정값을 사용합니다. |
파일 유형별 캐시
파일 유형별 캐시에서 파일 확장자별 유효 기간을 설정할 수 있습니다. 예를 들어 jpg,png,gif에 7 days를 설정할 수 있습니다. 엣지는 원본 서버 응답에 명시적인 유효 기간이 없을 때(max-age, s-maxage, Expires가 없을 때) 이 값을 적용합니다. 원본 서버가 유효 기간을 설정한 경우 원본 서버의 값이 우선합니다.
캐시하지 않는 응답
다음 응답은 설정과 관계없이 엣지 캐시에 저장되지 않습니다.
- 원본 서버에서
Cache-Control: no-store또는private를 포함하여 보낸 응답 - 쿠키를 설정하는 응답(
Set-Cookie) - Range 요청에 대한
206 Partial Content응답 - GET 및 HEAD 이외의 메서드를 사용하는 요청
브라우저 캐시
브라우저 캐시는 엣지가 브라우저용 Cache-Control 헤더를 추가할지 제어합니다.
- 활성화: 엣지가 실제로 캐시한 응답에는
Cache-Control: public, max-age=<edge TTL>을 추가합니다. 단, 원본 서버가Cache-Control을 보내지 않은 경우에만 추가합니다. 엣지 TTL은 엣지 자체가 응답을 보관하는 기간이므로 브라우저의 유효 기간도 엣지와 같아집니다. - 자동 또는 비활성화: 엣지가 브라우저 캐시 헤더를 추가하지 않습니다.
원본 서버의 Cache-Control은 항상 변경 없이 브라우저에 전달됩니다. 엣지는 다음 경우에 브라우저 캐시 헤더를 추가하지 않습니다.
- 동적 API 등 엣지가 캐시하지 않은 응답
- GET 및 HEAD 이외의 메서드를 사용하는 요청
- 상태 코드가 400 이상인 응답
- 쿠키를 설정하는 응답
이를 통해 동적 콘텐츠가 브라우저 캐시에 남는 것을 방지합니다.
정적 리소스의 브라우저 캐시 유효 기간을 길게 설정하는 가장 확실한 방법은 원본 서버가 해당 리소스에 대해 명시적인 Cache-Control: max-age=...를 전송하도록 하는 것입니다.
캐시 키
캐시 키는 어떤 요청이 같은 캐시 사본을 공유할지 결정합니다. 이 섹션 하단의 미리보기에서 현재 설정에 따른 키 구성을 확인할 수 있습니다.
쿼리 문자열 처리 모드:
| 모드 | 동작 | 예시 |
|---|---|---|
| 표준 | 모든 쿼리 매개변수를 그대로 유지합니다 | ?a=3과 ?a=4를 별도로 캐시합니다 |
| 무시 | 모든 쿼리 매개변수를 무시합니다 | ?a=3과 ?a=4가 하나의 사본을 공유합니다 |
| 정렬 | 모든 매개변수를 유지하고 이름순으로 정렬합니다 | ?b=2&a=1과 ?a=1&b=2가 하나의 사본을 공유합니다 |
| 허용 목록 | 나열된 매개변수만 유지합니다 | id,page |
| 차단 목록 | 나열된 매개변수를 제외합니다 | utm_source,utm_medium,ref |
매개변수 이름은 쉼표로 구분합니다.
다음 기준으로 캐시를 구분할 수도 있습니다.
- 기기 유형별 구분: 모바일과 데스크톱에 별도의 사본을 사용합니다.
- 국가별 구분: 방문자의 국가 또는 지역별로 별도의 사본을 사용합니다.
- 언어별 구분:
Accept-Language별로 별도의 사본을 사용합니다. - 캐시 호스트 모드: 키에 포함할 호스트 이름을 선택합니다.
- 원본 요청: 방문자가 요청한 Host입니다. 기본값입니다.
- 분석 후: 사이트와 일치한 호스트 이름입니다.
- Host 헤더: 원본 서버 요청에 사용하는 Host입니다.
기준을 추가할 때마다 하나의 URL이 여러 캐시 사본으로 나뉠 수 있으며, 캐시 적중률이 낮아집니다. 필요한 기준만 활성화하십시오.
고급 캐시 및 네거티브 캐시
| 설정 | 설명 |
|---|---|
| 상태 코드별 캐시(네거티브 캐시) | 404 또는 301과 같은 특정 상태 코드의 캐시 유효 기간을 seconds 단위로 설정합니다. 다른 모든 TTL 설정보다 우선하며, 오류 응답으로 인해 원본 서버에 요청이 반복되는 것을 방지합니다. |
| min_ttl / max_ttl | 최종 캐시 유효 기간의 하한과 상한입니다. 0은 제한 없음을 의미합니다. |
| stale_if_error | 원본 서버에 장애가 발생했을 때 만료된 콘텐츠를 계속 제공할 기간을 seconds 단위로 지정합니다. |
| Authorization이 있으면 캐시하지 않음 | Authorization 헤더가 있는 요청은 캐시를 건너뛰고 원본 서버로 전달합니다. |
| 클라이언트 no-cache 준수 | Cache-Control: no-cache가 있는 요청은 캐시를 건너뜁니다. |
| 캐시를 우회할 세션 Cookie | session 또는 token처럼 목록에 있는 쿠키가 하나라도 포함된 요청은 캐시를 건너뜁니다. |
원본 서버 보호(Origin Shield)
원본 서버 최대 동시 연결 수는 하나의 사이트에서 원본 서버로 동시에 전송하여 처리 중인 요청 수를 제한합니다. 0은 제한 없음을 의미합니다.
제한을 초과하면 **한도 초과 동작(단계별)**의 작업이 순서대로 적용됩니다.
- cache_first: 캐시에서 제공합니다.
- queue: 대기열에서 기다립니다. 대기열 길이와 최대 대기 시간을 milliseconds 단위로 설정합니다.
- challenge: 사람 확인 절차를 표시합니다.
- block: 요청을 차단하고 설정한 Retry-After 시간을 반환합니다.
처리 용량이 제한된 원본 서버를 보호하는 데 사용합니다.
캐시 삭제
캐시 설정을 변경해도 이미 캐시된 콘텐츠는 만료되지 않습니다. 엣지가 원본 서버에서 최신 콘텐츠를 가져오도록 하려면 다음과 같이 진행합니다.
- 캐시 탭 오른쪽 상단의 캐시 삭제를 클릭합니다. 도메인 목록과 개요 탭에서도 한 번의 클릭으로 사이트 전체 캐시를 삭제할 수 있습니다.
- 삭제 유형을 선택합니다.
- 전체 사이트 캐시 삭제: 사이트의 모든 캐시 콘텐츠를 삭제합니다.
- URL별 삭제: 한 줄에 하나의 URL을 입력합니다. 전체 URL(
https://example.com/css/app.css) 또는 경로(/css/app.css)를 사용할 수 있습니다.
- 삭제 확인을 클릭합니다.
URL별 삭제 시 일치 조건은 다음과 같습니다.
- 쿼리 문자열이 있는 경우(예:
/list?page=2): 해당 매개변수 조합의 사본만 삭제합니다. 일치 여부를 확인하기 전에 사이트의 쿼리 문자열 모드에 따라 쿼리를 정규화합니다. - 쿼리 문자열이 없는 경우(예:
/list): 해당 경로의 모든 쿼리 문자열 변형을 삭제합니다. - 와일드카드: 패턴으로 삭제하려면
*가 포함된 줄을 하나 입력합니다. 예를 들어https://example.com/static/*는 해당 디렉터리 아래의 모든 콘텐츠를 삭제합니다.*가 포함된 줄이 두 개 이상이면 요청은 사이트 전체 캐시 삭제로 처리됩니다.
캐시 삭제 요청은 백그라운드에서 모든 엣지 노드에 전달되며 보통 수 초 내에 완료됩니다. 이후 X-Cache-Status 응답 헤더를 curl -I로 확인합니다. 첫 번째 요청에는 MISS가 표시되어야 합니다.
사이트 전체 캐시를 삭제한 직후에는 모든 요청이 원본 서버로 전달되므로 원본 서버의 부하가 눈에 띄게 증가합니다. 몇 개의 파일만 변경했다면 해당 URL의 캐시만 삭제하십시오.