CDN 설정

CDN 개념 이해하기

CDN을 처음 접하는 분을 위해 핵심 개념을 쉽게 설명합니다.

CDN이란?

CDN은 전 세계에 분산된 서버(엣지 노드) 네트워크를 통해 콘텐츠를 사용자 가까이에서 빠르게 전달하는 서비스입니다.

🏢
Origin Server

실제 콘텐츠가 저장된 고객 서버. CDN 도입 후 전체 요청의 99% 이상은 원본에 도달하지 않습니다.

Edge Node

사용자와 가까운 위치에 배치된 M2Live CDN 서버. 캐싱된 콘텐츠를 원본 요청 없이 즉시 응답합니다.

💾
Cache (캐시)

엣지 노드에 임시 저장된 콘텐츠. TTL 동안 유지되며 반복 요청을 처리합니다.

TTL (Time To Live)

캐시 유지 시간. 만료 후 다음 요청 시 원본에서 새 콘텐츠를 가져와 다시 캐싱합니다.

Origin Pull

Cache MISS 시 CDN이 원본 서버에서 콘텐츠를 가져오는 동작. Origin Pull이 적을수록 CDN 효율이 높습니다.

Purge (퍼지)

캐시를 강제 삭제합니다. 원본 변경 후 CDN에 즉시 반영할 때 사용합니다.

캐시 HIT vs MISS

✅ Cache HIT — 엣지에서 즉시 응답
사용자브라우저
→ 요청← 즉시 응답
M2Live CDN캐시 보유
⚡ <5ms
⚠ Cache MISS — 원본에서 가져온 후 캐싱
사용자브라우저
→ 요청← 응답
M2Live CDN캐시 없음
→ Origin Pull← 응답+캐싱
원본 서버
이후 HIT 처리

캐시 히트율 (Cache Hit Ratio)

히트율상태조치
99% 이상최적현재 설정 유지
90~99%양호TTL 연장 검토
70~90%개선 필요Cache-Control 헤더 및 TTL 점검
70% 미만CDN 효과 저조즉시 기술지원팀 문의

HTTP 캐시 헤더 가이드

CDN 서비스는 원본 서버의 Cache-Control 헤더를 최우선으로 준수합니다. 원본 서버에서 콘텐츠의 용도에 알맞은 캐시 정책을 내려주시면, CDN이 훨씬 더 효율적으로 작동하여 서버 부하를 줄이고 최상의 전송 속도를 제공할 수 있습니다.

헤더동작권장 대상
Cache-Control: max-age=864001일 캐싱정적 이미지 (JPG, PNG 등)
Cache-Control: max-age=25920001달 캐싱비디오 (MP4 등 대용량 미디어)
Cache-Control: max-age=3005분 캐싱업데이트가 잦은 CSS, JS
Cache-Control: no-cache매 요청마다 재검증자주 변경되는 HTML 문서
CDN 설정

빠른 시작 가이드

M2Live Cloud CDN을 처음 구성하는 7단계 가이드입니다.

시작 전 체크리스트

항목내용필수
서비스 도메인서브도메인 권장 (예: cdn.myservice.com)필수
원본 서버 주소실제 콘텐츠가 있는 서버 IP/도메인필수
SSL 인증서인증서, 키파일, 체인인증서(HTTPS 서비스 시)HTTPS 시 필수
DNS 편집 권한CNAME 레코드 추가 권한필수

단계별 설정

1
호스팅 발급 요청
기술지원팀에 서비스 도메인·원본 서버 주소를 전달합니다.
가이드 →
2
DNS CNAME 등록
초기 TTL 300초로 설정하여 전파 시간을 단축합니다.
DNS
cdn.myservice.com  300  IN  CNAME  cdn.myservice.service1.m2live.io.
가이드 →
3
원본 서버 연결
CDN 설정 → 원본 연결/헤더 제어에서 원본 주소와 프로토콜을 설정합니다.
가이드 →
4
SSL 인증서 등록
CDN 설정 → SSL에서 인증서 파일을 등록합니다.
가이드 →
5
캐시 TTL 설정
정적 콘텐츠 86400s+, HTML 300s 이하를 권장합니다.
가이드 →
6
미디어 On-the-fly 최적화 활성화
이미지 최적화(AVIF/WebP)와 비디오 최적화(WebM)를 활성화합니다.
가이드 →
7
상태 확인 및 모니터링
캐시 히트율 99%+, 전송 성공률 99.9%+ 이상이 정상 운영 기준입니다.
가이드 →

콘텐츠 유형별 권장 TTL

정적 콘텐츠
이미지 (.jpg .png .avif)86400s+
비디오 (.mp4 .webm)86400s+
CSS / JS86400s
폰트 파일604800s+
동적 콘텐츠
HTML 페이지0~300s
API 응답 (JSON)0~60s
로그인 필요 페이지캐시 제외
실시간 데이터0s (no-cache)
🚫 자주 하는 실수
  • API 엔드포인트에 긴 TTL — 모든 사용자에게 동일 캐시가 반환됩니다.
  • 로그인 페이지 캐싱 — 다른 사용자의 개인정보가 노출될 수 있습니다.
  • 원본 IP 외부 노출 — CDN 도입 후에도 원본 IP가 공개되면 직접 공격이 가능합니다.
CDN 설정

도메인 관리

CDN 서비스에 연결할 도메인을 신청하고, DNS · 인증서 · 원본 서버 세 가지 상태를 실시간으로 확인합니다.

도메인 연결 신청

도메인 연결 신청 버튼을 클릭해 팝업을 작성합니다. 운영팀이 호스팅을 발급하면 DNS 설정 단계로 진행할 수 있습니다.

항목설명입력 예시
도메인 필수 CDN으로 서빙할 도메인. 루트 도메인(example.com)은 불가하며 반드시 서브도메인으로 신청해야 합니다. cdn.myservice.com
img.myservice.com
설명 필수 도메인 용도를 알아보기 쉬운 메모. 팀원 간 운영 목적 구분에 유용합니다. 이미지 CDN (상품 사진)
동영상 스트리밍
⚠ 루트 도메인(apex domain)은 사용할 수 없습니다
DNS 표준상 루트 도메인에는 CNAME 레코드를 설정할 수 없습니다. 반드시 cdn., img. 등 서브도메인으로 신청하세요. ALIAS(ANAME) 레코드가 필요한 경우 기술지원팀에 문의하세요.

서비스 상태 — 3가지 진단 항목

도메인을 선택하면 DNS · 인증서 · 원본 서버 상태를 실시간으로 확인할 수 있습니다. 각 항목의 정상 기준과 이상 시 조치 방법은 아래 표를 참고하세요.

항목주요 확인 포인트이상 시 조치
① DNS A 레코드가 M2Live CDN IP 대역을 가리키는지 확인.
응답 시간 100ms 이하 정상.
DNS TTL은 초기 30~300초, 안정화 후 3600초 이상 권장.
CNAME/A 레코드 미설정 또는 전파 중 → DNS 레코드 확인. 전파는 최대 48시간 소요.
② 인증서 주체(Subject)에 서비스 도메인 포함 여부 확인.
유효 기간 내에 있는지 확인.
남은 기간 30일 이하면 갱신 준비.
만료 시 브라우저 경고 즉시 발생 → SSL 탭에서 새 인증서 재등록.
③ 원본 서버 가용 IP가 1개 이상인지 확인.
가용 IP 0개라면 원본 장애 상태.
가용 IP 0개 또는 5xx 응답 → 원본 서버 점검 후 기술지원팀 연락.
💡 와일드카드 인증서로 관리 간소화
*.myservice.com 와일드카드 인증서 하나로 모든 서브도메인을 커버할 수 있습니다. 갱신도 한 번에 처리됩니다.
🚫 원본 IP를 외부에 노출하지 마세요
CDN 도입 후에도 원본 IP가 공개되면 CDN을 우회한 직접 공격이 가능합니다. 원본 서버 방화벽에서 M2Live CDN IP 대역의 요청만 허용하고 그 외 HTTP/HTTPS 트래픽은 차단하세요.

URL 진단 — 캐시 HIT/MISS 확인

서비스 상태 화면 하단 URL 진단에 리소스 경로를 입력하면 CDN 경유 여부와 캐시 상태를 즉시 확인할 수 있습니다.

결과 항목의미 및 이상 시 조치
응답 코드5xx → 원본 서버 장애 / 404 → 원본 경로 오류 / 301·302 → 리다이렉트 루프 점검
캐시 상태항상 MISS면 TTL 설정 또는 Cache-Control 헤더 점검
CDN 경유 여부미경유 시 DNS 전파 미완료 또는 CNAME/A 레코드 오류
Content-Type기대와 다른 포맷이면 미디어 최적화 설정 또는 Accept 헤더 확인
CDN 설정

일반 설정

도메인 활성화, Alias(별칭 도메인), 전송 대역폭 제한, URL Rewrite 정책을 관리합니다. 각 항목은 독립적으로 켜고 끌 수 있으며, 저장 즉시 반영됩니다.

항목개념활용 예시
도메인 Alias하나의 CDN 설정으로 여러 도메인을 동시에 서빙합니다.img.myservice.comcdn.myservice.com을 단일 CDN으로 연결
전송 대역폭 제한도메인당 최대 전송 속도(Mbps)를 제한합니다.서비스 품질을 낮추어 과금량을 줄입니다.
URL Rewrite정규표현식으로 요청 URL을 CDN 엣지에서 재매핑합니다. 원본 서버나 클라이언트 변경 없이 URL 구조를 투명하게 전환합니다.구 경로 /old/(.*) → 신 경로 /new/$1

① 도메인 활성화

CDN 서비스 전체를 ON/OFF하는 마스터 스위치입니다. 비활성화하면 해당 도메인의 모든 CDN 기능(캐시, 이미지·비디오 최적화, 접근 제어 등)이 즉시 중단됩니다. 중단 전 반드시 도메인을 다른 서비스로 라우팅하도록 변경해야 합니다.

CDN 설정 — 일반 > 도메인 활성화
도메인 활성화
비활성화 시 CDN 캐시·최적화 기능이 모두 중단됩니다.
서비스 활성화
도메인의 서비스 상태를 변경합니다.
⚠ 비활성화 전 반드시 확인하세요
비활성화하면 CDN을 통한 캐시 응답이 즉시 중단됩니다. 트래픽 이관이 필요하다면 이관되는 서비스에 충분한 대역폭이 확보되어야 합니다.

② 도메인 Alias (별칭 도메인)

Alias는 하나의 CDN 설정(원본 서버, 캐시 정책, SSL 등)을 여러 도메인이 공유할 수 있게 해주는 기능입니다. 예를 들어 이미지용 img.myservice.com과 일반 콘텐츠용 cdn.myservice.com이 동일한 원본과 설정을 사용한다면, 별도 CDN을 만들지 않고 Alias로 등록하면 됩니다.

CDN 설정 — 일반 > 도메인 Alias
도메인 Alias
이 CDN 서비스로 콘텐츠를 서빙하는 모든 도메인을 등록합니다.
http(s)://
cdn.example.com
💡 Alias 도메인에도 DNS CNAME 등록이 필요합니다
Alias로 등록한 도메인도 메인 도메인과 동일하게 DNS에 CNAME 레코드를 추가해야 CDN을 경유합니다. DNS 설정 방법은 도메인 관리 섹션을 참고하세요.

③ 전송 대역폭 제한

도메인당 CDN에서 전송할 수 있는 최대 속도를 Mbps 단위로 제한합니다. 트래픽을 억제하여 트래픽 비용을 예측 가능하게 관리할 수 있습니다. 대신 서비스 품질(전송속도)는 저하됩니다.

설정값동작권장 시나리오
비활성화 (기본)속도 제한 없음. CDN이 가능한 최대 속도로 전송합니다.-
CDN 설정 — 일반 > 전송 대역폭 제한
전송 대역폭 제한
대역폭 제한
최대 전송속도를 Mbps 단위로 제한합니다.
100
Mbps  (최소 1 Mbps ~ 최대 1,000 Mbps)
💡전송 대역폭 제한은 도메인 단위입니다

④ URL Rewrite 정책

CDN 엣지에서 클라이언트 요청 URL을 정규표현식(RegExp) 패턴으로 매칭한 뒤, 지정한 형식으로 변조합니다. 캐싱키와 원본에 요청되는 URL 모두 바뀐 URL이 사용됩니다. 클라이언트나 원본 서버 코드를 수정하지 않고도 URL 구조를 투명하게 변경할 수 있습니다.

구성 요소설명예시
URL 패턴매칭할 정규표현식. 괄호 ()로 캡처 그룹을 만들면 치환에서 #1, #2로 참조할 수 있습니다.([^/]+)/(.*)
치환패턴이 일치했을 때 재조합할 URL. 캡처 그룹은 #1, #2 … 순서로 참조합니다.#1.php?id=#2
변경 전 URL 로깅Rewrite가 적용되기 전의 원본 요청 URL을 access.log에 함께 기록합니다. 디버깅 시 유용합니다.
대소문자 구분패턴 매칭 시 대소문자를 구분할지 여부입니다. 기본값은 구분하지 않음(case-insensitive)입니다.
CDN 설정 — 일반 > URL Rewrite 정책
URL Rewrite 정책
정규표현식을 기반으로 URL을 재조합합니다. 패턴 및 치환에서 도메인을 변경할 수 없습니다.
URL Rewrite 켜기
URL 패턴
cloud.m2live.io/
ex) ([^/]+)/(.*)
치환
cloud.m2live.io/
ex) #1.php?id=#2
클라이언트 요청이 패턴에 매칭되어 변환되면 변환된 URL로 access.log에 기록됩니다.

URL Rewrite 패턴 예시

변환 목적URL 패턴치환결과
경로 구조 변환 ([^/]+)/(.*) #1.php?id=#2 /post/123/post.php?id=123
디렉토리 접두사 추가 (.*) /v2/#1 /api/users/v2/api/users
확장자 제거 (.*)\.html$ #1 /about.html/about
구 경로 → 신 경로 /old/(.*) /new/#1 /old/banner.jpg/new/banner.jpg
💡 테스트 버튼으로 먼저 검증하세요
규칙을 저장하기 전에 테스트 버튼을 눌러 입력한 패턴이 원하는 URL에 올바르게 매칭되는지 확인할 수 있습니다. 잘못된 패턴은 전체 요청이 오작동할 수 있으므로 반드시 테스트 후 저장하세요.
🚫 도메인 변경은 불가합니다
URL Rewrite는 경로(path) 부분만 변환할 수 있습니다. 패턴 또는 치환에 다른 도메인을 입력해도 적용되지 않습니다. 도메인 간 리다이렉트가 필요하다면 접근 제어 → HTTP 리다이렉트를 사용하세요.
CDN 설정

원본 연결 / 헤더 제어

CDN이 원본 서버(Origin Server)와 통신하는 방식 전반을 설정합니다. 프로토콜·주소·타임아웃부터 요청/응답 헤더 조작, Redirect 처리, 원본요청 URL Rewrite까지 원본 연결과 관련된 모든 항목이 이 탭에 집중되어 있습니다.

Origin Pull

Cache MISS 시 CDN 엣지가 원본 서버로 콘텐츠를 가져오는 동작. 이후 동일 요청은 캐시에서 즉시 응답합니다.

🔀
Request Coalescing

동일 콘텐츠에 동시 요청이 몰릴 때 Origin Pull을 1회로 병합합니다. 원본 과부하 방지 핵심 기능.

🏷
Host 헤더

CDN이 원본에 요청할 때 보내는 Host 값. 원본이 Host헤더로 요청을 분기한다면 반드시 일치해야 합니다.

Timeout

연결대기(Connect)와 수신대기(Read) 두 단계의 타임아웃을 각각 설정합니다. Timeout되면 CDN의 에러처리 메커니즘이 가동됩니다.

📋
헤더 변조

원본 → CDN(응답헤더 변조) 구간에서 HTTP 헤더를 추가·덮어쓰기·삭제할 수 있습니다.

원본요청 URL Rewrite

캐시키에는 영향없이 원본에 전달할 URL을 정규표현식으로 변환합니다.

① 원본 프로토콜 / 주소

CDN 엣지가 원본 서버로 Origin Pull 요청을 보낼 때 사용할 프로토콜과 주소를 설정합니다. 여러 주소를 등록하면 라운드로빈 로드밸런싱이 적용되며, 보조 주소로 설정한 서버는 주 서버가 모두 응답 불가일 때만 투입됩니다.

항목설명권장값
원본 프로토콜CDN ↔ 원본 간 통신 방식. HTTP는 암호화 없이 빠르고, HTTPS는 종단간(End-to-End) 암호화를 보장합니다.내부망이면 HTTP, 공인망이면 HTTPS 권장
원본 주소IP 주소 또는 도메인. http://, https:// 접두사 없이 입력합니다.192.168.10.135 또는 origin.myservice.com
포트(port)원본 서버가 수신하는 포트 번호. 기본 포트(HTTP 80, HTTPS 443)와 다를 때 지정합니다.-
보조 주소주 원본 서버 전체 장애 시 자동으로 전환되는 Failover 서버입니다.가용성이 중요한 서비스에 설정 권장
CDN 설정 — 원본 프로토콜/주소
원본 프로토콜/주소
CDN 서버와 원본이 통신할 프로토콜을 선택합니다.
HTTP
HTTPS
원본주소 목록
원본서버 주소를 도메인 또는 IP 목록으로 입력하세요.
원본연결
http(s)://
127.0.0.1
port
8585
IP 주소 또는 도메인 이름을 프로토콜(http:// 또는 https://) 제외하고 입력하세요.
보조(원본 장애 시 투입)주소로 사용
💡 원본 서버 IP 보호 (DDoS 방어)
CDN 도입 후 원본 서버 방화벽에서 M2Live CDN IP 대역의 요청만 허용하세요. 원본 IP가 외부에 노출되면 CDN을 우회한 직접 DDoS 공격이 가능합니다. CDN IP 대역은 기술지원팀에 문의하세요.

② Host 헤더

CDN이 원본 서버에 요청을 보낼 때 HTTP Host 헤더에 어떤 값을 넣을지 결정합니다. 기본적으로는 클라이언트가 요청한 Host 값이 그대로 전달됩니다. 원본 서버가 Apache VirtualHost나 Nginx server_name으로 여러 도메인을 구분하거나, 포트가 포함된 Host를 요구하는 경우 이 옵션을 활성화해 맞춤 값을 입력합니다.

CDN 설정 — Host 헤더
Host 헤더
Host 헤더변경
기본적으로 원본으로 요청하는 Host 헤더는 클라이언트가 요청한 Host 헤더와 동일합니다. 원본으로 요청할 Host 헤더를 지정하려면 이 옵션을 활성화하세요.
CDN 서버가 원본 서버로 요청할 때 사용할 Host 헤더 값을 지정합니다. 원본 서버가 지정한 Host 헤더를 처리할 수 있어야 합니다.
ex) www.example2.com:8080
값 미지정시 기본값이 적용됩니다.

③ 중복요청 병합 (Request Coalescing)

동일한 콘텐츠에 대해 Cache MISS 상태에서 대량의 요청이 동시에 들어올 때, CDN이 원본 서버에 Origin Pull을 단 1회만 보내고 나머지 요청은 그 응답을 기다렸다가 한꺼번에 처리하는 기능입니다. Thunder Herd Problem(캐시 만료 시 원본에 요청이 폭주하는 현상)을 방지하는 핵심 설정입니다.

CDN 설정 — 중복요청 병합
중복요청
중복요청 제거
원본부하를 최대한 낮추기 위해 원본서버로 중복요청이 발생하지 않도록 보장합니다. 동일요청은 분산된 노드에 의해 1회만 발생합니다.
이 기능은 비활성화할 수 없습니다.

④ 연결대기 / 수신대기 시간 (Timeout)

CDN이 원본 서버와 통신할 때 적용되는 두 가지 타임아웃을 설정합니다. 타임아웃이 반복되면 CDN은 해당 원본을 장애로 간주하고 보조 원본으로 전환하거나 오류 응답을 반환합니다.

항목의미기본값설정 범위
연결대기 시간
(Connect Timeout)
CDN이 원본 서버에 TCP 연결을 맺을 때까지 기다리는 시간. 원본 서버가 연결 자체를 받지 못하는 경우(방화벽 차단, 서버 다운 등)에 적용됩니다. 3초 0 ~ 5초
(0 = 기본값 적용)
수신대기 시간
(Read Timeout)
TCP 연결 후 원본 서버가 데이터를 전송하지 않는 유휴 시간의 허용 한도. 연결은 됐지만 응답이 느린 경우(처리 지연, 대용량 파일 등)에 적용됩니다. 10초 0 ~ 60초
(0 = 기본값 적용)
CDN 설정 — 타임아웃
연결대기 시간 (초)
기본 3초로 구성된 원본 연결대기 시간을 변경합니다.
3
초  (최대 5초, 0 입력 시 기본값 적용)
수신대기 시간 (초)
기본 10초로 구성된 원본 수신대기 시간을 변경합니다. 수신대기는 데이터가 상호 전송되지 않은 시간입니다.
10
초  (최대 60초, 0 입력 시 기본값 적용)
⚠ 타임아웃을 너무 길게 설정하면 장애 감지가 느려집니다
기다린다고 능사가 아닙니다. 빨리 실패하고 재시도하는 것이 서비스 내구성을 높이는 더 나은 방법입니다.

⑤ 세션 재사용 (Keep-Alive / Connection Reuse)

CDN과 원본 서버 사이의 TCP 연결을 요청마다 새로 맺지 않고 재사용하는 기능입니다. 비활성화 시 매 HTTP 요청마다 TCP 3-Way Handshake가 새로 발생해 연결 오버헤드가 증가합니다. 원본 서버가 Keep-Alive를 지원하면 반드시 활성화를 권장합니다.

CDN 설정 — 세션 재사용
세션 재사용
세션 재사용 & 세션유지 시간설정
세션을 재사용하지 않습니다. 세션당 1회만 HTTP 요청/응답이 발생합니다.

⑥ 비표준헤더 캐싱

원본 서버가 응답에 포함하는 HTTP 헤더 중 CDN이 캐시와 함께 저장할 헤더 범위를 결정합니다. 기본적으로 CDN은 보안 문제를 방지하기 위해 표준으로 정의된 헤더만 캐싱합니다. Set-Cookie 헤더는 어떤 설정에서도 캐싱되지 않습니다.

모드동작권장 상황
표준 헤더만RFC 표준 헤더(Cache-Control, Content-Type, ETag 등)만 캐싱합니다.일반적인 정적 콘텐츠 CDN
확장 표준 헤더 + 비표준 헤더표준 헤더 + 원본 서버가 추가한 커스텀 헤더(X-Custom-* 등)까지 함께 캐싱합니다.커스텀 헤더를 클라이언트에 전달해야 하는 API/미디어 서비스
CDN 설정 — 비표준헤더 캐싱
비표준헤더 캐싱
비표준 HTTP 헤더 캐싱
안정성때문에 원본서버가 보내는 헤더 중 아래 표준헤더만을 선별적으로 캐싱한다.
어떤 설정이라도 Set-Cookie 헤더는 캐싱되지 않습니다.
목록: Cache-Control, Content-Disposition, Content-Encoding, Content-Length, Content-Type, Expire, Transfer-Encoding, Server, Content-Language, Content-Location, Content-MD5, Proxy-Authenticate, Retry-After, TE, Trailer, Warning, WWW-Authenticate

⑦ 원본 ETag 지원

ETag는 콘텐츠의 버전을 나타내는 해시 값입니다. 원본 서버가 응답에 ETag를 포함하면 CDN이 이를 저장해 두고, 이후 캐시를 재검증할 때 원본에 If-None-Match 헤더로 전달합니다. 원본이 "변경 없음"을 확인하면 304로 응답해 불필요한 데이터 전송을 줄입니다.

CDN 설정 — 원본 ETag 지원
원본 ETag 지원
원본 ETag 저장 및 갱신지원
원본서버 응답의 ETag 헤더를 저장하고, 갱신시 If-None-Match 헤더를 추가한다.

⑧ Redirect 재요청

원본 서버가 301/302 등 Redirect 응답을 반환했을 때 CDN이 Location 헤더의 URL로 자동으로 재요청해 최종 콘텐츠를 가져오는 기능입니다. 비활성화 시 CDN은 Redirect 응답 자체를 캐시하고 클라이언트에 그대로 전달해, 클라이언트가 직접 Redirect를 따라갑니다.

항목설명예시
Redirect 상태코드재요청을 트리거할 HTTP 상태코드를 지정합니다. 3xx는 300번대 전체를 의미합니다.3xx, 301, 302
URL 패턴재요청을 적용할 URL 패턴. 빈값이면 전체 URL에 적용됩니다. 와일드카드 *는 모든 패턴을 의미합니다.*.mp4, /videos/*
CDN 설정 — Redirect 재요청
Redirect 재요청
원본이 Redirect시 재요청
원본 서버가 Redirect를 응답하면, CDN 서버가 Location 값으로 재요청하여 콘텐츠를 가져옵니다. 최대 3회까지 재요청합니다.
Redirect 상태코드
3xx ×
원본서버가 응답하는 Redirect 상태코드를 지정합니다. 3xx는 모든 300 계열 응답코드를 나타냅니다.
URL 패턴
ex) *.mp4
특정 URL 패턴만 추적할 수 있습니다. 와일드카드 *는 모든 패턴을 의미합니다.
⚠ Redirect 재요청 활성화 시 캐시를 퍼지하세요
이 옵션을 활성화한다면, 기존 캐시를 삭제(Purge)하여 최신 콘텐츠를 서비스하도록 보장하세요. 이미 캐싱된 Redirect 응답이 그대로 남아 있으면 의도한 대로 동작하지 않을 수 있습니다.

⑨ User-Agent 헤더

CDN이 원본 서버로 Origin Pull 요청을 보낼 때 전송하는 User-Agent 헤더 값을 설정합니다. 기본값은 M2Live 클라우드 서비스명입니다. 원본 서버가 특정 User-Agent만 허용하거나, 클라이언트 User-Agent를 그대로 전달해야 할 때 변경합니다.

CDN 설정 — User-Agent 헤더
User-Agent 헤더
원본요청 User-Agent 헤더변경
원본요청의 User-Agent 헤더를 변경할 수 있습니다. 기본 값은 M2Live 클라우드 서비스명입니다.

⑩ X-Forwarded-For (XFF) 헤더

X-Forwarded-For는 클라이언트의 실제 IP 주소를 프록시(CDN)를 거쳐 원본 서버에 전달하기 위한 표준 HTTP 헤더입니다. CDN을 거치면 원본 서버는 CDN의 IP만 보게 되므로, 클라이언트 IP 기반의 로깅·접근 제어·지역 판단이 필요하다면 반드시 이 기능을 활성화해야 합니다.

동작설명
비활성화클라이언트 X-Forwarded-For 헤더의 맨 좌측 필드만 원본 서버에 전달합니다.
활성화클라이언트가 보낸 X-Forwarded-For 헤더에 클라이언트 IP(=Remote Socket IP)를 추가해 전달합니다. 클라이언트가 헤더를 보내지 않았다면 클라이언트 IP만 원본에 전달합니다.
CDN 설정 — X-Forwarded-For 헤더
X-Forwarded-For 헤더
클라이언트 XFF 헤더 준수
비활성화 상태에서는 클라이언트 X-Forwarded-For헤더의 맨 좌측 필드만 원본서버에 전달됩니다.
활성화하면 클라이언트가 보낸 X-Forwarded-For헤더에 클라이언트 IP를 추가합니다. 만약 클라이언트가 해당 헤더를 보내지 않았다면 X-Forwarded-For헤더의 값으로 클라이언트 IP만 원본서버로 전달합니다.

⑪ 요청헤더 변조

CDN이 원본 서버로 요청을 전달할 때 HTTP 헤더를 동적으로 추가·덮어쓰기·삭제하는 기능입니다. 특정 URL 패턴에만 선택적으로 적용할 수 있습니다.

항목설명예시
헤더 이름추가·변경·삭제할 HTTP 헤더 이름x-media-type
헤더에 설정할 값. 삭제 액션 선택 시 비워둡니다.video/mp4
URL 패턴이 규칙을 적용할 URL 패턴. 빈값이면 전체 URL에 적용됩니다./*.mp4
액션추가(없으면 추가, 있으면 덮어쓰기) / 강제 덮어쓰기 / 삭제 중 선택추가 (헤더가 존재하면 덮어쓰고 없다면 추가)
CDN 설정 — 요청헤더 변조
요청헤더 변조
원본 요청시 헤더변조
CDN 서버가 원본 서버에 요청을 보낼 때 추가, 삭제할 HTTP 헤더를 정의합니다.
헤더 이름
ex) x-media-type
ex) video/mp4
URL 패턴
ex) /*.mp4
액션

⑫ 응답헤더 변조

원본 서버가 CDN에 응답을 보낼 때 HTTP 헤더를 동적으로 추가·덮어쓰기·삭제하는 기능입니다. 요청헤더 변조와 동일한 구조지만 방향이 반대(원본 → CDN)입니다.

CDN 설정 — 응답헤더 변조
응답헤더 변조
원본 응답시 헤더변조
원본 서버가 CDN 서버에 응답을 보낼 때 추가, 삭제할 HTTP 헤더를 정의합니다.
헤더 이름
ex) x-media-type
ex) video/mp4
URL 패턴
ex) /*.mp4
액션
💡 헤더 변조 활용 예시
  • 요청헤더 추가: 원본 서버 인증을 위해 X-CDN-Secret: <token> 헤더를 모든 Origin Pull에 삽입
  • 응답헤더 추가: 원본이 CORS 헤더를 반환하지 않을 때 Access-Control-Allow-Origin: *를 응답에 삽입
  • 응답헤더 삭제: 원본이 반환하는 민감한 Server 헤더를 제거해 서버 정보 노출 방지

⑬ 원본요청 URL Rewrite

클라이언트 요청 URL을 원본 서버에 전달하기 전에 정규표현식으로 변환합니다. 일반 설정의 URL Rewrite와 달리 캐시키에 영향을 주지 않습니다. 즉, 클라이언트 입장에서는 원래 URL로 캐시가 관리되지만, 원본 서버에는 변환된 URL로 요청이 전달됩니다.

구분일반 설정 URL Rewrite원본요청 URL Rewrite
변환 시점CDN 엣지 진입 시 (캐시키 변경됨)원본 전달 직전 (캐시키 불변)
캐시키 영향있음 — 변환된 URL로 캐시 저장없음 — 원본 URL로 캐시 저장
주요 용도클라이언트에게 노출되는 URL 구조 변경원본 서버의 내부 경로 매핑
CDN 설정 — 원본요청 URL Rewrite
원본요청 URL Rewrite
원본요청 URL Rewrite 활성화
정규표현식을 기반으로 원본요청 URL을 재조합합니다. 캐싱키에 영향을 주지 않습니다.
도메인별로 독립 설정되므로 도메인이름은 입력하지 않습니다.
URL 패턴
ex) /img/(.*\.(jpg|png).*)​
치환
ex) /#1/m2/composite/watermark1
CDN 설정

SSL / HTTPS

클라이언트(브라우저)와 CDN 엣지 노드 간 HTTPS 암호화 통신을 설정합니다. SSL 인증서를 등록하면 보안 HTTPS 프로토콜을 통해 콘텐츠를 안전하게 전송할 수 있습니다.

🔐 전체 구간 암호화 구성 (End-to-End)
  • 사용자 ↔ CDN 엣지: 이 페이지에서 등록한 SSL 인증서로 HTTPS 암호화
  • CDN 엣지 ↔ 원본 서버: 원본 연결/헤더 제어 탭에서 HTTPS 프로토콜 선택
  • 두 구간 모두 HTTPS로 설정해야 완전한 종단간(End-to-End) 암호화가 보장됩니다.

SSL/TLS 핵심 개념

📄
인증서 (Certificate)

CA(인증기관)가 발급한 공개 인증서. 도메인 소유권을 증명하며 브라우저가 신뢰하는 기관의 서명이 포함되어 있습니다. .pem, .crt, .cer 형식을 지원합니다.

🔑
개인 키 (Private Key)

인증서와 쌍을 이루는 비밀 키. 암호화된 통신을 복호화하는 데 사용됩니다. 절대 외부에 노출해서는 안 됩니다. .pem, .key 형식을 지원합니다.

🔗
인증서 체인 (Chain/Bundle)

중간 CA(Intermediate CA) 인증서 묶음. 브라우저가 루트 CA까지 신뢰 경로를 확인하는 데 필요합니다. 없으면 일부 브라우저/기기에서 경고가 발생합니다. .pem, .crt, .cer 형식을 지원합니다.

🛡
TLS 버전

암호화 프로토콜 버전. TLSv1.2는 구형 클라이언트 호환성을 위해, TLSv1.3은 보안·성능 향상을 위해 권장됩니다. 기본값은 TLSv1.2 + TLSv1.3 동시 지원입니다.

인증서 파일 구성

파일역할지원 형식필수 여부
증명서
(Certificate)
CA가 발급한 공개 인증서. 도메인 소유권 및 서버 신원을 증명합니다. .pem .crt .cer 필수
개인 키
(Private Key)
인증서와 쌍을 이루는 비밀 키. 서버가 암호화된 통신을 복호화하는 데 사용됩니다. .pem .key 필수
인증서 체인
(Chain / Bundle)
중간 CA 인증서 묶음. 브라우저가 루트 CA까지 신뢰 경로를 추적하는 데 필요합니다. .pem .crt .cer 권장 (없으면 일부 환경에서 경고 발생)
TLS 버전 이 인증서에 적용할 TLS 프로토콜 버전을 지정합니다. 미선택 시 기본값(TLSv1.2, TLSv1.3)이 사용됩니다. TLSv1.2 / TLSv1.3 선택 (기본값 권장)

HTTPS 활성화 및 인증서 관리

CDN 설정 — SSL
HTTPS
HTTPS 활성화
보안 HTTPS 프로토콜을 통해 콘텐츠를 전송하려면 SSL 인증서를 추가하세요. SSL 인증서는 웹 서버와 사용자 브라우저 간의 안전하고 암호화된 통신을 보장합니다.
증명서: _wildcard_.m2live.io_2025090589371.crt.pem
개인 키: _wildcard_.m2live.io_2025090589371.key.pem
인증서 체인: root-chain-bundle.pem
TLS 버전: TLSv1.2TLSv1.3

SSL 인증서 추가 — 입력 항목

SSL 인증서 추가 버튼을 클릭하면 아래 팝업이 열립니다. 각 파일은 직접 내용을 붙여넣거나 파일 첨부 버튼으로 업로드할 수 있습니다.

SSL 인증서 추가
증명서
클릭하여 증명서 파일 선택 (.pem, .crt, .cer)
개인 키
클릭하여 개인 키 파일 선택 (.pem, .key)
인증서 체인
클릭하여 인증서 체인 파일 선택 (.pem, .crt, .cer)
TLS 버전 선택 (선택사항)
TLSv1.2 × TLSv1.3 ×
이 인증서에 적용할 TLS 버전을 선택하세요. 선택하지 않으면 기본값(TLSv1.2, TLSv1.3)이 사용됩니다.
취소
SSL 인증서 추가

TLS 버전 선택 가이드

버전보안 수준호환성권장 여부
TLSv1.0 낮음 — POODLE, BEAST 취약점 존재 구형 IE6~8, Android 2.x 사용 금지
TLSv1.1 낮음 — 현대적 암호 스위트 미지원 구형 브라우저 사용 금지
TLSv1.2 양호 — 현재 널리 사용 중 Chrome 30+, iOS 5+, Android 4.4+ 권장 (호환성)
TLSv1.3 높음 — 핸드셰이크 단축, 취약 암호 제거 Chrome 70+, Firefox 63+, iOS 12.2+ 권장 (보안)
💡 TLSv1.2 + TLSv1.3 동시 설정 권장
TLSv1.3만 선택하면 구형 기기(Android 6 이하, iOS 11 이하 등)에서 접속 오류가 발생할 수 있습니다. TLSv1.2와 TLSv1.3을 함께 선택하면 최신 클라이언트는 TLSv1.3으로, 구형 클라이언트는 TLSv1.2로 자동 협상됩니다.

와일드카드 인증서 활용

와일드카드 인증서(*.myservice.com)는 동일 도메인의 모든 서브도메인에 하나의 인증서를 적용할 수 있습니다. 서브도메인마다 개별 인증서를 발급·등록·갱신하는 부담을 줄이고, 관리 포인트를 단일화할 수 있습니다.

인증서 유형커버 범위관리 난이도
단일 도메인 cdn.myservice.com 1개만 서브도메인 추가마다 재발급 필요
와일드카드
(Wildcard)
*.myservice.com → 모든 1단계 서브도메인 갱신 1회로 전체 적용
⚠ 인증서 만료는 서비스 중단으로 이어집니다
인증서가 만료되면 브라우저는 즉시 "연결이 안전하지 않습니다" 경고를 표시합니다. 최소한 만료 30일 전부터 갱신을 준비하고, 새 인증서 파일을 이 화면에서 다시 등록하세요. 남은 유효 기간은 도메인 관리 → 서비스 상태에서 확인할 수 있습니다.
🚫 개인 키(Private Key)는 절대 외부에 노출하지 마세요
개인 키가 유출되면 제3자가 동일한 인증서를 사용해 통신을 복호화하거나 위조 서버를 구성할 수 있습니다. 개인 키 파일은 등록 후 즉시 로컬에서 안전하게 보관하고, 불필요한 복사본은 삭제하세요.

인증서 갱신 체크리스트

단계작업비고
1CA에서 새 인증서 발급 (증명서 + 개인 키 + 체인)만료 30일 전 시작 권장
2SSL 탭 → 기존 인증서 편집 또는 삭제 후 재추가편집 시 서비스 중단 없이 교체 가능
3도메인 관리 → 서비스 상태에서 인증서 항목 "유효" 확인반영까지 최대 수 분 소요
4URL 진단으로 HTTPS 정상 응답 확인응답 코드 200, CDN 경유 여부 확인
CDN 설정

캐시 (TTL)

TTL(Time To Live)은 콘텐츠가 CDN 엣지에 캐싱되는 시간입니다. TTL 우선순위 제어부터 응답코드별 TTL, no-cache/no-store 정책, 커스텀 TTL, 갱신 예외, 캐시키 구성, POST 캐싱, 바이패스까지 캐시와 관련된 모든 설정이 이 탭에 집중되어 있습니다.

⚖️ TTL의 트레이드오프
  • TTL ↑ 길수록 → 히트율 높아짐, 원본 부하 감소 → 단, 콘텐츠 변경 시 이전 버전이 계속 제공될 수 있음
  • TTL ↓ 짧을수록 → 항상 최신 콘텐츠 제공 → 단, 히트율 낮아지고 원본 부하 증가
  • 최적 전략: 정적 콘텐츠 긴 TTL + URL 버전 해시(cache busting) + 변경 시 퍼지(Purge)

① TTL 적용 우선순위

CDN은 원본 서버의 Cache-Control 헤더를 기본적으로 준수하지만, 운영 필요에 따라 CDN 콘솔에서 강제로 우선순위를 변경할 수 있습니다. 우선순위 목록은 드래그로 순서를 조정할 수 있으며, 목록 상단일수록 높은 우선순위로 적용됩니다.

TTL 소스설명우선순위 기본값
커스텀 TTLURL 패턴별로 콘솔에서 직접 지정한 TTL1순위 (최고)
원본 max-age원본의 Cache-Control: max-age2순위
원본 no-cache원본이 Cache-Control: no-cache로 응답 — 매 요청마다 원본에서 재검증3순위
응답코드별 설정응답코드(2xx/3xx/4xx/5xx)별로 콘솔에서 지정한 TTL4순위
원본 no-store원본이 Cache-Control: no-store로 응답 — 캐싱 완전 불가5순위
원본 s-maxage원본이 CDN 전용으로 지정한 Cache-Control: s-maxage6순위 (최저)
CDN 설정 — TTL 적용 우선순위
TTL 적용 우선순위
TTL 적용 우선순위 변경
CDN 캐싱시간(TTL, Time To Live)은 원본응답의 Cache-Control을 준수하는 것이 기본이지만, 관련 헤더가 없거나, 운영편의성 측면에서 CDN에서 강제할 수도 있습니다.
TTL 우선순위 선택
⠿ 커스텀 TTL × ⠿ 원본 max-age × ⠿ 원본 no-cache × ⠿ 응답코드별 설정 × ⠿ 원본 no-store × ⠿ 원본 s-maxage ×
적용할 TTL 우선순위를 선택합니다.

② 응답코드별 TTL

원본 서버의 HTTP 응답 상태코드 계열별로 TTL을 개별 설정합니다. 오류 응답(4xx/5xx)이 길게 캐싱되면 원본 문제가 해결된 후에도 사용자가 계속 오류를 받게 되므로 짧게 유지해야 합니다. 접속실패·수신실패 시의 동작 정책도 함께 설정합니다.

응답코드의미권장 TTL이유
2xx
200, 201, 204 등
성공 응답. 정상적으로 반환된 콘텐츠86400초 (1일) 이상정적 콘텐츠는 길게 캐싱할수록 히트율 향상
3xx
301, 302, 303 등
리다이렉트 응답300초 (5분)리다이렉트 목적지가 변경될 수 있으므로 중간값 권장
4xx
400, 401, 403 등
클라이언트 오류 (잘못된 요청, 권한 없음 등)3초오류가 수정되면 즉시 정상 응답으로 전환되어야 함
5xx
500, 501, 502 등
서버 오류 (원본 장애, 과부하 등)3초원본 복구 후 즉시 정상 서비스 재개 필요
접속실패CDN이 원본에 TCP 연결 자체를 맺지 못한 경우3초이미 캐싱된 콘텐츠라면 접속실패 시간(초)만큼 TTL을 연장
수신실패연결 후 원본이 데이터를 전송하지 않은 경우3초신규 캐싱 시 원본 장애가 발생하면 500으로 응답하고 접속실패 시간만큼 유지
CDN 설정 — 응답코드별 TTL
응답코드별 TTL
응답코드별 TTL 재정의
원본서버의 응답코드별로 TTL을 설정합니다.
2xx 계열 응답코드 TTL (200, 201, 204 등)
86400
3xx 계열 응답코드 TTL (301, 302, 303 등)
300
4xx 계열 응답코드 TTL (400, 401, 403 등)
3
5xx 계열 응답코드 TTL (500, 501, 502 등)
3
접속실패
3
수신실패
3
실패 시 정책:
  • 이미 캐싱된 콘텐츠라면 접속실패 시간(초)만큼 TTL을 연장한다.
  • 신규 캐싱시 원본 장애가 발생하면 500으로 응답하고 접속실패 시간만큼 유지합니다.

③ no-cache 응답 정책

원본 서버가 200번대 성공 상태코드(200 OK 등)를 Cache-Control: no-cache와 함께 응답한 경우, CDN이 어떻게 동작할지를 정의합니다. no-cache는 "캐시하지 말라"가 아니라 "캐시하되, 사용 전 반드시 원본에서 재검증하라"는 의미입니다.

옵션동작권장 상황
기본값 사용CDN 기본 동작 방식을 따릅니다. (TTL: 5초)별도 정책이 필요 없는 일반 서비스
응답코드별 TTL 사용응답코드별 TTL 설정값을 그대로 적용합니다.응답코드별 TTL을 이미 세밀하게 설정한 경우
TTL 재정의no-cache 응답에만 별도의 TTL 값을 직접 지정합니다.no-cache 응답을 짧게 캐싱해 원본 부하를 줄이고 싶을 때
응답 즉시 만료캐싱하지 않고 매 요청마다 원본에서 가져옵니다.원본의 no-cache 지시를 CDN도 그대로 준수해야 할 때
CDN 설정 — no-cache 응답 정책
no-cache 응답 정책
원본서버가 200번대 상태코드(200 OK 등)를 Cache-Control: no-cache로 응답한 경우 동작방식을 정의합니다.
기본값 사용
응답코드별 TTL 사용
TTL 재정의
응답 즉시 만료
기본 동작 방식을 사용합니다.(TTL:5초)

④ no-store 응답 정책

원본 서버가 200번대 성공 상태코드를 Cache-Control: no-store와 함께 응답한 경우의 동작을 정의합니다. no-store는 "이 응답을 어떠한 형태로도 저장해서는 안 된다"는 강력한 지시입니다. 로그인 응답, 결제 정보 등 민감 데이터에 주로 사용됩니다.

옵션동작권장 상황
기본값 사용CDN 기본 동작 방식을 따릅니다. (TTL: 5초)별도 정책이 필요 없는 일반 서비스
응답코드별 TTL 사용응답코드별 TTL 설정값을 그대로 적용합니다.응답코드별 TTL이 이미 세밀하게 설정된 경우
TTL 재정의no-store 응답에만 별도의 TTL 값을 직접 지정합니다.no-store 응답을 일부 캐싱하고 싶은 특수한 경우
캐싱하지 않고 바이패스캐시하지 않고 원본 응답을 클라이언트에 그대로 전달합니다.원본의 no-store 지시를 CDN도 완전히 준수해야 할 때 (민감 정보)
CDN 설정 — no-store 응답 정책
no-store 응답 정책
원본서버가 200번대 상태코드(200 OK 등)를 Cache-Control: no-store로 응답한 경우 동작방식을 정의합니다.
기본값 사용
응답코드별 TTL 사용
TTL 재정의
캐싱하지 않고 바이패스
기본 동작 방식을 사용합니다.(TTL:5초)
🚫 민감 정보 응답은 반드시 no-store + 바이패스로 설정하세요
민간함 정보라면 아예 CDN을 경유하지 않도록 하는 것이 더 나은 접근입니다.

⑤ 커스텀 TTL

URL 패턴별로 TTL을 직접 지정합니다. 원본의 Cache-Control 헤더와 무관하게 CDN에서 강제로 TTL을 적용할 수 있습니다. 규칙은 선언된 순서대로 매칭되므로, 더 구체적인 패턴을 목록 상단에 먼저 선언해야 합니다.

항목설명예시
URL 패턴TTL을 적용할 URL 경로 패턴. 와일드카드 *를 사용할 수 있습니다./samples/*.js, /images/*
TTL해당 패턴에 적용할 캐시 유지 시간(초). 0을 입력하면 캐싱하지 않습니다.1800 (30분), 86400 (1일)
CDN 설정 — 커스텀 TTL
커스텀 TTL
커스텀 TTL 활성화
URL 패턴으로 TTL을 지정한다. 선언된 순서대로 매칭하기 때문에 구체적인 표현을 먼저 선언해야 한다.
URL 패턴
ex) /samples/*.js
TTL
ex) 1800
💡 커스텀 TTL 패턴 선언 순서가 중요합니다
CDN은 커스텀 TTL 규칙을 위에서 아래로 순서대로 매칭하며 첫 번째로 일치하는 규칙을 적용합니다. 예를 들어 /images/thumb/*.jpg/images/*가 모두 있다면, /images/thumb/*.jpg를 반드시 위에 선언해야 합니다.

⑥ 갱신 예외 TTL (Stale-While-Revalidate)

캐시된 콘텐츠의 TTL이 만료됐을 때 원본 서버 장애 등의 이유로 갱신이 불가능한 경우, 만료된 캐시를 계속 서빙할지 여부를 설정합니다. 원본 장애 상황에서 사용자에게 오류 대신 이전 콘텐츠를 제공해 서비스 가용성을 높이는 데 활용됩니다.

항목동작권장 여부
갱신불가시 TTL 연장원본 장애 등으로 캐싱된 콘텐츠 갱신이 불가능하면 TTL을 자동 연장해 기존 캐시를 계속 서빙합니다.활성화 권장
5xx TTL 연장캐싱된 콘텐츠 갱신 시점에 원본이 500번대 오류를 응답한 경우 TTL을 자동 연장합니다.활성화 권장
4xx TTL 연장캐싱된 콘텐츠 갱신 시점에 원본이 400번대 오류를 응답한 경우 TTL을 자동 연장합니다.선택적 — 4xx는 의도적 오류일 수 있으므로 신중히 설정
CDN 설정 — 갱신 예외 TTL
갱신 예외 TTL
갱신불가시 TTL 연장
원본장애등으로 캐싱된 콘텐츠 갱신할 수 없다면 TTL을 자동연장한다.
5xx TTL 연장
캐싱된 콘텐츠 갱신시점에 500번대 응답을 받은 경우, TTL을 자동연장한다.
4xx TTL 연장
캐싱된 콘텐츠 갱신시점에 400번대 응답을 받은 경우, TTL을 자동연장한다.

⑦ 캐시키 구성 (Cache Key)

캐시키(Cache Key)는 CDN이 동일한 요청인지 구별하는 기준입니다. 캐시키를 구성하는 요소가 많을수록 더 다양하게 캐시가 분리되어 히트율이 낮아질 수 있습니다. 반대로 요소를 줄이면 히트율은 높아지지만 잘못된 콘텐츠가 제공될 위험이 있습니다.

항목활성화 시 동작비활성화 시 동작권장값
대소문자 구분URL의 대소문자를 구분해 별도 캐시로 저장
/Image.jpg/image.jpg = 별개 캐시
모두 소문자로 정규화해 동일 캐시로 처리활성화 권장 (원본이 대소문자를 구분하는 경우)
Accept-Encoding 헤더 구분클라이언트의 압축 지원 여부(gzip, br 등)에 따라 별도 캐시로 저장Accept-Encoding 헤더를 무시하고 Plain으로 동작활성화 권장 (압축 응답을 캐싱하는 경우)
QueryString 구분URL의 쿼리스트링(?key=value)을 포함해 캐시키 구성
/api?v=1/api?v=2 = 별개 캐시
쿼리스트링을 무시하고 동일 리소스로 처리활성화 권장 (버전 파라미터·필터 파라미터가 있는 경우)
Vary 헤더 지원원본의 Vary 헤더 값을 인식해 헤더 값별로 별도 캐시 저장
캐시 조건이 크게 늘어 HIT율 저하 가능
Vary 헤더를 무시비활성화 권장 (HIT율 저하 주의)
CDN 설정 — 캐시키 구성
캐싱키 구성
대소문자 구분
클라이언트 요청의 대소문자를 구분한다. 비활성화되면 모두 소문자로 처리한다.
Accept-Encoding 헤더 구분
클라이언트 요청 Accept-Encoding 헤더에 따라 개별로 캐싱한다. 비활성화되면 Accept-Encoding 헤더를 무시한다. (Plain으로 동작한다.)
QueryString 구분
클라이언트 요청의 QueryString을 구분한다. 비활성화되면 QueryString을 무시한다.
Vary 헤더 지원
Vary 헤더를 인식하여 콘텐츠를 구분한다. 일반적으로 Vary 헤더는 캐시 효율을 크게 저하시킨다.
이 옵션이 활성화되면 캐싱조건이 많아져 HIT율이 크게 저하되기 때문에 주의한다.

⑧ POST 캐싱

일반적으로 HTTP POST 요청은 상태를 변경하는 요청으로 간주되어 캐싱하지 않습니다. 이 기능을 활성화하면 POST 요청과 응답을 캐싱할 수 있습니다. 단, 최대 4KB까지의 POST Body만 캐싱 가능하며, 이를 초과하는 요청은 자동으로 바이패스(원본 직접 전달)됩니다.

CDN 설정 — POST 캐싱
POST 캐싱
POST 요청/응답 캐싱
활성화하면 POST 요청/응답을 캐싱할 수 있습니다.
최대 4KB까지의 POST Body를 캐싱할 수 있습니다. 초과되는 POST 요청은 바이패스됩니다.
⚠ POST 캐싱 활성화 전 반드시 확인하세요
POST 요청이 서버 상태를 변경하는 경우(데이터 생성·수정 등)에 캐싱을 활성화하면 이전 응답(201 created)이 재사용되어 의도치 않은 동작이 발생할 수 있습니다. 동일한 POST Body에 항상 동일한 응답을 반환하는 읽기 전용 API에만 사용을 권장합니다.

⑨ 바이패스 (Bypass)

특정 URL 패턴에 해당하는 요청을 CDN이 캐시하지 않고 원본 서버로 직접 전달합니다. 로그인·결제·실시간 데이터 등 캐싱이 부적합한 경로를 명시적으로 지정할 수 있습니다. 규칙은 선언된 순서대로 매칭되므로, 더 구체적인 패턴을 먼저 선언해야 합니다.

항목설명예시
URL 패턴바이패스를 적용할 URL 경로 패턴. 명확한 경로 또는 와일드카드 패턴을 사용합니다./source/public.zip, /assets/*.js
액션현재는 bypass 단일 액션만 지원합니다. 해당 URL의 모든 요청을 원본으로 직접 전달합니다.bypass
CDN 설정 — 바이패스
바이패스
URL 패턴으로 바이패스
CDN 서버에 의해 캐싱되지 않는 URL 규칙을 설정합니다. 명확한 URL(/sample/api) 또는 와일드카드를 포함하는 패턴(/asset/*.js)으로 구성할 수 있습니다.
선언된 순서를 따릅니다. 항상 명확한 패턴이 우선하도록 구성하세요.
URL 패턴
ex) /source/public.zip, /assets/*.js 등...
액션
💡 콘텐츠 유형별 권장 TTL 요약
정적 콘텐츠 (긴 TTL 권장)
이미지 (.jpg .png .avif .webp)86400s+
비디오 (.mp4 .webm)86400s+
CSS / JS (버전 해시 포함)86400s+
폰트 파일604800s+
동적 콘텐츠 (짧은 TTL 또는 바이패스)
HTML 페이지0~300s
API 응답 (JSON)0~60s
로그인 / 결제 페이지바이패스
실시간 데이터0s (no-cache)
CDN 설정

콘텐츠 처리

조건부 요청(304 Not Modified), If-Modified-Since 비교 정책, If-Range 헤더 처리, GZip/Brotli 압축을 설정합니다. 각 항목은 불필요한 데이터 전송을 줄여 대역폭 비용을 절감하고 응답 속도를 높이는 데 기여합니다.

🔄
조건부 요청 (304 Not Modified)

브라우저가 이미 캐싱한 리소스를 재요청할 때, CDN이 콘텐츠 변경 여부만 확인하고 변경이 없으면 헤더만 담긴 304 응답을 반환합니다. 전체 파일을 재전송하지 않아 대역폭과 응답 시간이 크게 절감됩니다.

🕐
If-Modified-Since

브라우저가 캐싱한 리소스의 마지막 수정 시각을 헤더로 전달합니다. CDN이 캐싱된 Last-Modified 값과 비교해 변경 여부를 판단합니다.

🏷
If-None-Match (ETag)

브라우저가 캐싱한 리소스의 ETag(콘텐츠 해시)를 헤더로 전달합니다. CDN이 현재 캐싱된 ETag와 비교해 변경 여부를 판단합니다. 시각 비교보다 정밀합니다.

📹
If-Range / Range Request

비디오 탐색(seek) 등에서 파일의 특정 바이트 구간만 요청하는 방식. If-Range는 캐싱된 버전이 유효한지 먼저 확인하고, 유효하면 206 Partial Content로 응답합니다.

📦
GZip / Brotli 압축

HTML, CSS, JS, JSON 등 텍스트 콘텐츠를 압축 전송합니다. 이미지·비디오는 이미 압축된 포맷이므로 적용하지 않습니다. Brotli는 GZip 대비 20~26% 추가 압축률을 제공합니다.

① 클라이언트 304 정책 (조건부 요청)

브라우저가 보낸 조건부 헤더(If-Modified-Since, If-None-Match)를 CDN이 어떤 기준으로 평가해 304를 반환할지 결정합니다. 두 헤더를 함께 사용하는 경우 어느 하나라도 일치하면 304로 판단할지, 특정 헤더만 사용할지를 선택합니다.

옵션동작권장 상황
일부 일치 권장 If-Modified-Since 또는 If-None-Match 중 하나라도 일치하면 304로 판단합니다. 두 헤더를 모두 활용해 최대한 304를 반환합니다. 대부분의 서비스 — 대역폭 절감 효과 최대화
If-Modified-Since만 If-Modified-Since 헤더만으로 판단합니다. ETag를 무시합니다. 원본 서버가 ETag를 생성하지 않는 경우
If-None-Match만 If-None-Match(ETag) 헤더만으로 판단합니다. 수정 시각을 무시합니다. 콘텐츠 해시 기반으로만 변경을 감지하고 싶은 경우
CDN 설정 — 클라이언트 304 정책
클라이언트 304 정책
클라이언트가 보낸 If-Modified-Since, If-None-Match 헤더에 대한 처리 방법을 설정합니다.
일부 일치
If-Modified-Since
If-None-Match
If-Modified-Since 또는 If-None-Match 중 하나라도 일치하면 304로 판단합니다.

② If-Modified-Since 조건판단

브라우저가 보낸 If-Modified-Since 값과 CDN이 캐싱한 Last-Modified 값을 어떻게 비교할지 정의합니다. HTTP 표준에서는 "같거나 큰 경우"(이상)를 변경 없음으로 판단하지만, 엄격하게 "정확히 일치하는 경우"만 304로 판단하는 옵션도 제공합니다.

옵션304 반환 조건권장 상황
같거나, 큰 경우 권장 클라이언트 값 ≥ 캐싱된 Last-Modified 값이면 304 반환. HTTP 표준 동작 방식. 대부분의 서비스 — 표준 준수 및 대역폭 절감
일치할 경우 클라이언트 값 = 캐싱된 Last-Modified 값이 정확히 동일한 경우에만 304 반환. 콘텐츠 수정 시각이 자주 바뀌는 서비스에서 엄격하게 재검증을 강제할 때
CDN 설정 — If-Modified-Since 조건판단
If-Modified-Since 조건판단
클라이언트가 보낸 If-Modified-Since 값의 비교 정책을 설정합니다.
같거나, 큰 경우
일치할 경우
클라이언트의 값이 캐싱된 Last-Modified 값보다 크거나 같은 경우 304로 판단합니다.
💡 304 응답의 대역폭 절감 효과
예를 들어 100KB 이미지를 1,000번 재요청할 때 모두 304로 처리되면 전체 전송량은 헤더 크기(~1KB) × 1,000 = 약 1MB에 불과합니다. 200 응답으로 처리 시 100MB가 소비되는 것과 비교하면 99% 대역폭 절감이 가능합니다.

③ If-Range 헤더 처리

If-Range 헤더는 브라우저가 범위 요청(Range Request)을 보내기 전에 "내가 캐싱한 버전과 CDN이 가진 버전이 동일한가?"를 먼저 확인하는 전제 조건 헤더입니다.

상황If-Range 활성화 시 동작If-Range 비활성화 시 동작
캐싱된 버전이 유효한 경우 206 Partial Content — 요청한 바이트 구간만 전송 If-Range 헤더를 무시하고 항상 200 전체 응답 또는 Range만 처리
캐싱된 버전이 변경된 경우 200 OK — 전체 파일을 새로 전송
CDN 설정 — If-Range 헤더
If-Range 헤더
If-Range 헤더 처리
If-Range 헤더를 준수하여 처리한다. 유효하다면 206 Partial Content, 아니라면 200 OK로 응답한다.
💡 비디오 스트리밍 서비스라면 반드시 활성화하세요
비디오 플레이어가 타임라인을 탐색(seek)할 때는 Range Request로 특정 구간의 데이터만 요청합니다. If-Range가 비활성화되면 CDN이 탐색 시마다 전체 파일을 다시 전송할 수 있어 대역폭 낭비와 버퍼링이 발생합니다. 비디오·오디오 파일을 서빙하는 경우 반드시 활성화하세요.

④ GZip / Brotli 압축

텍스트 기반 콘텐츠(HTML, CSS, JS, JSON, XML 등)를 CDN이 압축해 전송합니다. 브라우저가 압축을 지원하면 Accept-Encoding 헤더로 알려주고, CDN은 그에 맞는 압축 포맷으로 응답합니다. 원본이 이미 압축된 콘텐츠를 반환한다면 CDN은 재압축하지 않고 압축 상태를 유지합니다.

압축 방식압축률브라우저 지원권장 상황
GZip 일반적으로 60~80% 크기 감소 모든 현대 브라우저 지원 (IE6+) 호환성이 중요한 서비스
Brotli GZip 대비 20~26% 추가 압축 Chrome 50+, Firefox 44+, Safari 11+, Edge 15+ 최신 브라우저 대상 서비스, 성능 최적화 우선
CDN 설정 — GZip/Brotli 압축
GZip/Brotli 압축
GZip/Brotli 압축
콘텐츠를 GZip 또는 Brotli로 압축하여 전송합니다.
GZip
Brotli
GZip을 우선 압축알고리즘으로 사용합니다.
원본이 이미 콘텐츠를 압축한다면 압축상태를 유지합니다.
압축할 대상 URL 규칙을 설정합니다. 명확한 URL(/sample/api) 또는 와일드카드를 포함하는 패턴(/asset/*.js)으로 구성할 수 있습니다.
선언된 순서를 따릅니다. 항상 명확한 패턴이 우선하도록 구성하세요.
URL 패턴
/*.js*
URL 패턴
/*.css
URL 패턴
/*.scss

압축 적용 권장 대상

콘텐츠 유형압축 적용이유
HTML, CSS, JS, JSON, XML, SVG, 폰트(woff)적용 권장텍스트 기반으로 압축률이 높음 (60~80% 크기 감소)
JPEG, PNG, WebP, AVIF, GIF적용 불필요이미 손실/무손실 압축된 바이너리 포맷 — 재압축 시 오히려 크기 증가 가능
MP4, WebM, MP3, AAC적용 불필요미디어 코덱이 자체적으로 압축 — 추가 압축 효과 없음
ZIP, gz, br 등 압축 아카이브적용 불필요이미 압축된 파일 — 재압축 시 크기 증가 또는 처리 부하만 발생
💡 "원본이 이미 압축한다면 압축상태를 유지합니다" 옵션
원본 서버가 이미 gzip/brotli로 압축한 응답을 CDN으로 보낼 때, CDN이 이를 풀고 다시 압축하지 않고 원본의 압축 상태를 그대로 클라이언트에 전달합니다. 원본에서 압축을 직접 제어하고 싶다면 이 옵션을 활성화하세요.
⚠ 이미지·비디오 URL 패턴은 압축 규칙에서 제외하세요
/*처럼 모든 URL에 압축을 적용하면 이미 압축된 이미지·비디오 파일에도 GZip/Brotli 처리를 시도합니다. 압축 효과는 없고 CDN 처리 부하만 증가합니다. 반드시 /*.js, /*.css, /*.html 등 텍스트 파일 패턴만 등록하세요.
CDN 설정

접근 제어

HTTP→HTTPS 강제 리다이렉트, URL·IP·헤더 기반 접근 제어 규칙, OPTIONS 메서드 응답, HTTP 메서드 허용 범위를 설정합니다. CDN 엣지에서 요청을 선별적으로 허용·차단해 원본 서버 부하를 줄이고 보안을 강화합니다.

🔒
HTTP → HTTPS 리다이렉트

HTTP로 들어오는 모든 요청을 301(영구 리다이렉트)로 HTTPS로 전환합니다. 평문 통신을 차단해 도청·중간자 공격을 방지합니다.

🛡
접근제어 규칙

URL 패턴, 클라이언트 IP, 헤더(Referer, User-Agent) 세 가지 조건을 조합해 요청을 허용(Allow) 또는 거부(Deny)합니다. 규칙은 선언 순서대로 평가됩니다.

🌐
OPTIONS / CORS Preflight

브라우저는 Cross-Origin 요청 전 OPTIONS 메서드로 사전 확인(Preflight)을 보냅니다. CDN이 200으로 응답하도록 설정해야 CORS 요청이 정상 처리됩니다.

🔑
HTTP 메서드 제한

CDN에서 허용할 HTTP 메서드를 명시적으로 지정합니다. 정적 콘텐츠 CDN이라면 GET/HEAD만 허용하고 나머지는 원본으로 바이패스하거나 차단합니다.

① HTTP to HTTPS 리다이렉트

HTTP(포트 80)로 들어오는 모든 요청을 CDN 엣지에서 HTTPS(포트 443)로 301 영구 리다이렉트합니다. 클라이언트가 암호화되지 않은 평문으로 접속하는 것을 원천 차단하며, 브라우저는 이후 해당 도메인에 자동으로 HTTPS로 접속합니다.

CDN 설정 — HTTP to HTTPS 리다이렉트
HTTP to HTTPS 리다이렉트
HTTP 접근을 HTTPS로 리다이렉트
HTTP로 접근된 모든 요청은 HTTPS로 리다이렉트됩니다.
💡 HSTS(HTTP Strict Transport Security)와 함께 사용하면 더 강력합니다
HTTP→HTTPS 리다이렉트는 첫 요청에서만 동작합니다. 클라이언트 헤더 제어 탭에서 Strict-Transport-Security 헤더를 추가하면 브라우저가 이후 요청부터 자동으로 HTTPS만 사용해 첫 요청의 평문 노출도 차단할 수 있습니다.

② 접근제어 규칙

URL 패턴, 클라이언트 IP, 요청 헤더(Referer, User-Agent 등) 세 가지 조건을 조합해 특정 요청을 허용(Allow) 또는 거부(Deny)합니다. 규칙은 선언된 순서대로(위→아래) 평가되며, 첫 번째로 일치하는 규칙이 적용됩니다. 더 구체적인 조건을 먼저 선언해야 합니다.

조건 항목설명입력 예시
URL 패턴 접근을 제어할 요청 경로 패턴. 와일드카드 * 사용 가능. 비워두면 전체 URL에 적용됩니다. /m2livecloud/healthcheck
/admin/*
/*.env
IP 패턴 허용·차단할 클라이언트 IP 또는 IP 대역. CIDR 표기 또는 범위 표기를 지원합니다. 192.168.1.1
192.168.1.1-255
10.0.0.0/8
헤더 패턴 요청 헤더 값으로 조건을 설정합니다. Referer(Hotlinking 방지), User-Agent(봇 차단) 등에 활용합니다. referer
user-agent
동작 (Action) 조건 일치 시 수행할 동작. 거부(Deny)는 응답코드와 함께 접근을 차단하고, 허용(Allow)은 명시적으로 통과시킵니다. 거부(Deny) / 허용(Allow)
응답코드 거부(Deny) 시 클라이언트에 반환할 HTTP 상태코드. 기본값은 403입니다. 403 Forbidden
404 Not Found
200 OK
대소문자 구분 헤더 값 매칭 시 대소문자를 구분할지 여부. URL·IP는 항상 대소문자 무관하게 처리됩니다. 체크박스 활성화 시 구분
CDN 설정 — 접근제어 규칙
접근제어 추가
URL, 헤더, IP등 다양한 조건으로 콘텐츠 접근을 제어합니다.
패턴
URL 패턴
/m2livecloud/healthcheck
IP 패턴
ex) 192.168.1.1-255 or AP
헤더 패턴
ex) referer or user-agent
동작
응답코드
거부(Deny) 시 사용할 응답코드 (기본:403)

접근제어 활용 시나리오

목적URL 패턴IP 패턴헤더 패턴동작응답코드
관리자 페이지 IP 허용/admin/*203.0.113.0/24허용
관리자 페이지 외부 차단/admin/*거부403
Hotlinking(이미지 직링크) 방지/images/*referer (외부 도메인)거부403
특정 봇 User-Agent 차단user-agent (악성 봇 식별값)거부403
민감 파일 외부 노출 차단/*.env, /*.git거부404
헬스체크 엔드포인트 허용/healthcheck허용
⚠ 규칙 순서가 결과를 결정합니다
규칙은 위에서 아래로 순서대로 평가되며 첫 번째로 일치하는 규칙만 적용됩니다. 예를 들어 "특정 IP 허용" 규칙보다 "전체 차단" 규칙이 위에 있다면, 허용된 IP도 차단됩니다. 허용(Allow) 규칙을 거부(Deny) 규칙보다 항상 위에 선언하세요.

③ OPTIONS 메서드 응답

브라우저는 다른 도메인(Cross-Origin)에 fetch, XMLHttpRequest 등으로 요청하기 전에 CORS Preflight 요청을 OPTIONS 메서드로 먼저 보냅니다. CDN이 OPTIONS 요청에 어떻게 응답할지 결정합니다.

옵션동작권장 상황
405 Method Not Allowed OPTIONS 요청을 지원하지 않는다고 응답합니다. CORS Preflight가 실패해 브라우저의 Cross-Origin 요청이 차단됩니다. Cross-Origin 요청이 전혀 없는 서비스
200 OK 권장 OPTIONS 요청에 200으로 응답합니다. 브라우저가 Preflight를 통과해 실제 요청을 진행할 수 있습니다. 클라이언트 헤더 제어 탭에서 CORS 헤더도 함께 설정해야 합니다. 웹폰트, API fetch, Canvas 등 Cross-Origin 요청이 있는 서비스
CDN 설정 — OPTIONS 메서드
OPTIONS 메서드
OPTIONS 메서드 요청에 대한 응답코드를 설정합니다.
405 Method Not Allowed
200 OK
💡 CORS 오류가 발생한다면 체크리스트
브라우저 콘솔에서 has been blocked by CORS policy 오류가 발생할 때 순서대로 확인하세요.
  1. 접근 제어 → OPTIONS 메서드가 200 OK로 설정되어 있는지 확인
  2. 클라이언트 헤더 제어 → CORS 헤더 지원이 활성화되어 있는지 확인
  3. 원본 서버가 Access-Control-Allow-Origin 헤더를 반환하는지 확인

④ HTTP 메서드 제한

CDN이 처리하거나 원본으로 전달할 HTTP 메서드를 명시적으로 지정합니다. CDN은 기본적으로 HEAD, GET, POST를 처리하며, 이 외에 선언된 메서드만 원본으로 바이패스됩니다. 이 설정은 OPTIONS 메서드 응답 설정보다 우선합니다.

메서드용도CDN 기본 처리권장 설정
GET리소스 조회 — 캐싱 대상CDN 처리 (캐시)항상 허용
HEAD헤더만 조회 — 캐시 유효성 확인CDN 처리항상 허용
POST데이터 전송 — 상태 변경 요청CDN 처리 (POST 캐싱 설정에 따름)API 서비스에만 허용
PUT리소스 전체 교체선언 시 원본 바이패스REST API 서비스에만 허용
DELETE리소스 삭제선언 시 원본 바이패스REST API 서비스에만 허용
PATCH리소스 부분 수정선언 시 원본 바이패스REST API 서비스에만 허용
OPTIONSCORS Preflight 확인OPTIONS 메서드 설정에 따름CORS 사용 시 허용
TRACE요청 루프백 디버깅선언 시 원본 바이패스비허용 권장 (XST 공격 위험)
CDN 설정 — HTTP 메서드 제한
HTTP 메서드
HTTP 메서드 선택지원
지원할 HTTP 메서드를 선택합니다.
CDN 서버에서 처리할 수 있는 메서드(HEAD, GET, POST)를 제외한, 선언된 모든 메서드는 원본으로 바이패스된다. 이 설정은 OPTIONS 메서드 응답설정보다 우선한다.
HTTP 메서드 선택
HTTP 메서드
🚫 TRACE 메서드는 허용하지 마세요
TRACE 메서드는 XST(Cross-Site Tracing) 공격에 악용될 수 있습니다. 공격자가 TRACE를 통해 HttpOnly 쿠키를 포함한 요청 헤더 전체를 탈취할 수 있으므로, 특별한 이유가 없다면 절대 허용하지 마세요.
💡 서비스 유형별 권장 메서드 구성
서비스 유형권장 허용 메서드
정적 콘텐츠 CDN (이미지, CSS, JS)GET, HEAD
웹사이트 + CORS 지원GET, HEAD, OPTIONS
REST API CDNGET, HEAD, POST, PUT, DELETE, PATCH, OPTIONS
CDN 설정

클라이언트 헤더 제어

CDN이 클라이언트(브라우저)에게 전송하는 응답 헤더를 제어합니다. CORS 지원, 세션 재사용, Keep-Alive, Via, ETag, Server, Age 헤더 설정과 클라이언트 요청/응답 헤더 변조까지 클라이언트 방향의 모든 헤더 정책을 이 탭에서 관리합니다.

항목헤더역할 요약기본 권장값
CORS 헤더Access-Control-Allow-Origin다른 도메인의 JS에서 CDN 리소스 접근 허용활성화 (Cross-Origin 사용 시)
Connection 헤더Connection: keep-alive클라이언트와 CDN 간 TCP 연결 재사용활성화 권장
Keep-Alive 헤더Keep-Alive연결 유지 파라미터(최대 요청 횟수 등) 전달활성화 권장
Via 헤더ViaCDN 경유 여부 표시 — 디버깅용운영 환경 비활성화 권장
ETag 헤더ETag콘텐츠 해시로 브라우저 캐시 유효성 검증 → 304 절감활성화 권장
Server 헤더Server원본 서버 정보를 클라이언트에 전달보안상 비활성화 권장
Age 헤더AgeCDN 캐시에 저장된 후 경과한 시간(초) 표시활성화 권장 (캐시 디버깅)
요청헤더 변조커스텀클라이언트 → CDN 요청 헤더 추가·수정·삭제필요 시 설정
응답헤더 변조커스텀CDN → 클라이언트 응답 헤더 추가·수정·삭제필요 시 설정

① CORS 헤더 지원

CORS(Cross-Origin Resource Sharing)는 브라우저가 다른 도메인의 리소스를 JS에서 접근할 수 있도록 허용하는 표준 메커니즘입니다. CDN이 응답에 Access-Control-Allow-Origin 헤더를 추가해 브라우저의 Cross-Origin 요청을 허용합니다. 웹폰트 로드, fetch() API 호출, Canvas 이미지 처리 등에서 필수입니다.

옵션동작권장 상황
*, 모든 도메인 Access-Control-Allow-Origin: *를 응답에 추가합니다. 모든 도메인에서의 Cross-Origin 요청을 허용합니다. 공개 CDN, 공개 API, 누구나 사용 가능한 리소스
선언된 도메인 허용할 Origin 도메인을 직접 지정합니다. 요청의 Origin 헤더와 비교해 일치하는 경우에만 허용합니다. 특정 도메인만 허용해야 하는 내부 서비스, 인증이 필요한 API
CDN 설정 — CORS 헤더 지원
CORS 헤더 지원
CORS 지원 활성화
다음 값 중 하나를 사용하여 CDN에 Access-Control-Allow-Origin 헤더를 추가할 수 있습니다.
*, 모든 도메인
선언된 도메인
💡 쿠키·인증 헤더를 포함한 요청은 * 와일드카드를 사용할 수 없습니다
fetch(url, { credentials: 'include' })처럼 쿠키나 Authorization 헤더를 포함하는 Cross-Origin 요청은 브라우저 보안 정책상 Access-Control-Allow-Origin: *로는 동작하지 않습니다. 이 경우 선언된 도메인 옵션으로 구체적인 Origin을 지정하고, Access-Control-Allow-Credentials: true 헤더를 응답헤더 변조로 추가하세요.

② Connection 헤더 (세션 재사용)

CDN이 클라이언트에게 응답할 때 Connection 헤더를 포함해 TCP 연결의 재사용 여부를 알립니다. 활성화하면 Connection: keep-alive를 응답에 추가해 클라이언트가 동일 TCP 연결로 여러 요청을 연속 전송할 수 있도록 합니다. 비활성화하면 Connection: close로 응답해 요청마다 새 TCP 연결이 맺어집니다.

CDN 설정 — Connection 헤더
Connection 헤더
클라이언트 세션 재사용
클라이언트에게 Connection헤더를 Keep-Alive로 응답하여, 세션을 재사용합니다. 비활성화할 경우 Close로 재사용하지 않습니다.

③ Keep-Alive 헤더

Keep-Alive 헤더는 TCP 연결 유지에 대한 상세 파라미터를 클라이언트에 전달합니다. 최대 요청 횟수(max)를 설정하면 해당 연결에서 처리 가능한 최대 요청 수를 지정하며, 이후 트랜잭션마다 1씩 차감되어 0이 되면 연결을 종료합니다.

CDN 설정 — Keep-Alive 헤더
Keep-Alive 헤더
Keep-Alive 헤더 활성화
클라이언트 응답헤더에 Keep-Alive 헤더를 추가합니다.
최대 요청횟수 (음선)
ex) 1000
0이 아닌 값(양수)으로 설정하면 max값으로 설정된다. 이후 트랜잭션마다 1씩 차감된다.
💡 Connection과 Keep-Alive의 관계
Connection: keep-alive는 "연결을 유지하겠다"는 의사 표현이고, Keep-Alive: max=1000은 "최대 1,000번 요청까지 유지하겠다"는 구체적인 조건입니다. HTTP/2·HTTP/3 환경에서는 멀티플렉싱으로 연결 재사용이 기본이므로 이 헤더의 영향이 줄어듭니다.

④ Via 헤더

Via 헤더는 HTTP 요청/응답이 어떤 프록시(CDN 포함)를 경유했는지 기록하는 표준 헤더입니다. CDN 경유 여부와 버전 정보를 확인할 수 있어 디버깅에 유용하지만, 운영 환경에서는 인프라 구성 정보가 외부에 노출될 수 있으므로 비활성화를 권장합니다.

CDN 설정 — Via 헤더
Via 헤더
Via 헤더 추가
클라이언트 응답헤더에 Via헤더를 추가합니다.

⑤ ETag 헤더

ETag(Entity Tag)는 콘텐츠의 특정 버전을 나타내는 식별자(해시 값)입니다. CDN이 응답에 ETag를 포함하면 브라우저가 다음 요청 시 If-None-Match 헤더로 전달해, 콘텐츠가 변경되지 않았다면 CDN은 본문 없이 304 Not Modified만 반환합니다. 대역폭을 절감하고 페이지 로드 속도를 향상시킵니다.

CDN 설정 — ETag 헤더
ETag 헤더
ETag 헤더 추가
클라이언트 응답헤더에 ETag헤더를 추가합니다.

⑥ Server 헤더

Server 헤더는 원본 서버의 소프트웨어 정보(예: Apache/2.4.51, nginx/1.21.0)를 클라이언트에 전달합니다. 원본 서버가 이 헤더를 응답에 포함하는 경우 CDN이 이를 클라이언트에 그대로 전달할지 결정합니다. 서버 버전 정보는 공격자가 취약점을 식별하는 데 활용될 수 있으므로 운영 환경에서는 비활성화를 권장합니다.

CDN 설정 — Server 헤더
Server 헤더
Server 헤더 추가
원본서버가 Server헤더를 주는 경우, 클라이언트 응답헤더에 Server헤더를 추가합니다.
⚠ Server 헤더는 운영 환경에서 비활성화를 권장합니다
Server: Apache/2.4.51 (Ubuntu)처럼 구체적인 버전 정보가 노출되면 공격자가 해당 버전의 알려진 취약점(CVE)을 식별해 공격에 활용할 수 있습니다. 원본 서버 설정에서도 Server 헤더를 제거하거나 일반화하는 것을 함께 권장합니다.

⑦ Age 헤더

Age 헤더는 해당 콘텐츠가 CDN 캐시에 저장된 후 경과한 시간(초)을 나타냅니다. 예를 들어 Age: 300은 이 응답이 CDN에 5분 동안 캐싱되어 있었음을 의미합니다. 클라이언트와 개발자가 캐시 상태를 직접 확인할 수 있어 디버깅에 유용합니다.

CDN 설정 — Age 헤더
Age 헤더
Age 헤더 추가
클라이언트 응답헤더에 Age헤더를 추가합니다.
💡 Age 헤더로 캐시 HIT 여부를 빠르게 확인할 수 있습니다
브라우저 DevTools → Network 탭에서 응답 헤더의 Age 값을 확인하세요. Age: 0이면 방금 원본에서 가져온 것(Cache MISS 또는 첫 캐싱), 양수면 해당 초만큼 CDN에 캐싱된 상태(Cache HIT)입니다.

⑧ 요청헤더 변조 (클라이언트 → CDN)

클라이언트가 CDN 서버에 요청을 보낼 때 HTTP 헤더를 동적으로 추가·수정·삭제합니다. 원본 연결/헤더 제어 탭의 요청헤더 변조(CDN → 원본)와 방향이 다릅니다. 특정 URL 패턴에만 선택적으로 적용할 수 있습니다.

항목설명예시
헤더 이름추가·변경·삭제할 HTTP 헤더 이름x-media-type, Authorization
헤더에 설정할 값. 삭제 액션 선택 시 비워둡니다.video/mp4
URL 패턴이 규칙을 적용할 URL 패턴. 빈값이면 전체 URL에 적용./*.mp4
액션추가(없으면 추가·있으면 덮어쓰기) / 강제 덮어쓰기 / 삭제 중 선택추가 (헤더가 존재하면 덮어쓰고 없다면 추가)
CDN 설정 — 요청헤더 변조
요청헤더 변조
원본 요청시 헤더변조
클라이언트가 CDN 서버에 요청을 보낼 때 추가, 삭제할 HTTP 헤더를 정의합니다.
헤더 이름
ex) x-media-type
ex) video/mp4
URL 패턴
ex) /*.mp4
액션

⑨ 응답헤더 변조 (CDN → 클라이언트)

CDN이 클라이언트에 응답을 보낼 때 HTTP 헤더를 동적으로 추가·수정·삭제합니다. 원본 서버가 반환하지 않는 헤더를 CDN 레벨에서 삽입하거나, 노출해서는 안 되는 헤더를 제거할 때 사용합니다.

CDN 설정 — 응답헤더 변조
응답헤더 변조
원본 응답시 헤더변조
CDN 서버가 클라이언트에 응답을 보낼 때 추가, 삭제할 HTTP 헤더를 정의합니다.
헤더 이름
ex) x-media-type
ex) video/mp4
URL 패턴
ex) /*.mp4
액션
💡 헤더 변조 활용 예시
  • 보안 헤더 삽입: 원본이 반환하지 않는 X-Content-Type-Options: nosniff, X-Frame-Options: DENY를 응답헤더 변조로 일괄 추가
  • CORS 헤더 보완: 원본 서버 수정 없이 Access-Control-Allow-Origin 헤더를 응답에 삽입
  • 민감 헤더 제거: X-Powered-By, Server 헤더를 삭제 액션으로 제거해 서버 정보 노출 방지
  • 캐시 정책 강제: 특정 경로(/*.html)에만 Cache-Control: no-cache를 강제 덮어쓰기로 적용
CDN 설정

캐시 무효화 (퍼지)

원본 콘텐츠를 변경한 후 CDN 엣지에 캐싱된 이전 버전을 강제로 삭제해 최신 콘텐츠를 즉시 제공합니다. 퍼지 탭과 퍼지 히스토리 탭으로 구성됩니다.

퍼지(Purge)란?

CDN 엣지 노드에 저장된 캐시를 TTL 만료 전에 강제로 삭제하는 작업입니다. 원본 콘텐츠가 변경됐지만 TTL이 아직 남아 있을 때, 즉시 최신 버전을 제공해야 할 때 사용합니다.

🎯
URL 퍼지

특정 파일의 URL을 정확하게 지정해 해당 캐시만 삭제합니다. 쿼리스트링 포함 URL도 별도로 지정할 수 있습니다. 원본 부하가 가장 낮은 방식입니다.

🔍
패턴 퍼지

와일드카드(*)를 포함한 경로 패턴으로 여러 파일을 한 번에 삭제합니다. 특정 디렉토리나 파일 확장자 전체를 한꺼번에 무효화할 때 사용합니다.

전체 퍼지

해당 도메인의 모든 캐시를 동시에 삭제합니다. 대규모 배포·전체 리뉴얼 시 사용하지만, 이후 모든 요청이 원본으로 집중되므로 트래픽이 적은 시간에 실행해야 합니다.

퍼지 유형 비교

유형삭제 범위원본 부하권장 상황입력 예시
URL 퍼지 지정한 URL과 정확히 일치하는 캐시만 삭제 낮음 특정 이미지·파일·API 응답 수정 /images/banner.jpg
/images/image.png?goodNo=123
패턴 퍼지 와일드카드 패턴에 일치하는 캐시 일괄 삭제 중간 특정 디렉토리 교체, 파일 확장자 전체 갱신 /page/*.html
/images/*
/*
전체 퍼지 해당 도메인의 모든 캐시 동시 삭제 높음 🚨 대규모 배포, 전체 리뉴얼, CDN 설정 대폭 변경

퍼지 실행

퍼지를 실행하려면 먼저 도메인을 선택한 후 퍼지 유형을 선택하고 내용을 입력합니다. URL 퍼지의 경우 한 줄에 하나씩 URL을 입력하며, 도메인 이름은 포함하지 않고 경로(/)부터 입력합니다.

캐시 무효화(퍼지) — 퍼지 탭
도메인을 선택하세요
URL 퍼지
지정된 파일들의 캐시를 무효화합니다.
쿼리 문자열을 포함한 파일 URL을 지정하세요. 도메인 이름은 지정하지 마세요. 각 URL은 별도의 줄에 입력하세요.
예시: /images/image.jpg, /images/image.png?goodNo=123
전체 퍼지
해당 도메인의 모든 캐시를 무효화합니다.
전체 캐시 무효화는 서버 부하를 증가시킬 수 있습니다.
패턴 퍼지
패턴과 일치하는 파일들의 캐시를 무효화합니다. 패턴을 지정하려면 *를 사용하세요.
예시: /page/*.html, /images/*

퍼지 히스토리

실행된 모든 퍼지 작업의 이력을 확인합니다. 도메인, 퍼지 타입, 날짜로 필터링할 수 있으며, 각 퍼지의 결과(size · time · count)로 실제 삭제된 캐시의 규모를 파악할 수 있습니다.

컬럼의미
ID퍼지 작업의 고유 식별 번호. 오름차순으로 증가합니다.
도메인퍼지가 실행된 CDN 도메인
타입URL / 전체 / 패턴 중 실행된 퍼지 유형
내용퍼지 대상 URL 또는 패턴. 길면 "펼치기"로 전체 확인 가능
상태완료 / 진행 중 / 실패 등 퍼지 처리 상태
결과size: 삭제된 캐시 총 용량(bytes), time: 처리 시간(ms), count: 삭제된 캐시 항목 수
사용자퍼지를 실행한 계정 이메일
일시퍼지 실행 시각
캐시 무효화(퍼지) — 퍼지 히스토리 탭
도메인으로 검색...
퍼지 타입
날짜
ID도메인타입내용상태결과사용자일시
21360 cloud.m2live.io 패턴 /* 완료 {size:55586692, time:8, count:27} hideface@winesoft.co.kr 2026-03-18 17:30:34
21356 cloud.m2live.io URL / 완료 {size:0, time:0, count:0} hideface@winesoft.co.kr 2026-03-18 17:12:29
21103 cloud.m2live.io 전체 /* 완료 {size:87328, time:12, count:4} hideface@winesoft.co.kr 2026-03-11 13:13:02
21102 cloud.m2live.io 패턴 /* 펼치기 완료 {size:23766913377, time:16, c... 펼치기} hideface@winesoft.co.kr 2026-03-11 12:32:05

히스토리 결과 필드 해석

결과 필드의미해석 예시
size 삭제된 캐시의 총 용량(bytes) size: 55586692 → 약 53MB의 캐시 삭제됨
size: 0 → 해당 URL이 캐시에 없었음 (Cache MISS 상태였음)
time 퍼지 처리에 걸린 시간(ms) time: 8 → 8ms 만에 처리 완료
count 삭제된 캐시 항목(파일) 수 count: 27 → 27개의 캐시 항목 삭제됨
count: 0 → 삭제된 캐시 없음 (미캐싱 상태)
💡 결과가 size:0, count:0이라면?
퍼지 대상 URL 또는 패턴에 해당하는 콘텐츠가 CDN에 캐싱되어 있지 않았다는 의미입니다. URL을 잘못 입력했거나(도메인 포함, 오타 등), 이미 TTL이 만료되어 자연 삭제된 경우입니다. URL 입력 시 도메인을 제외하고 경로(/)부터만 입력하는지 확인하세요.
⚠ 전체 퍼지 후 원본 서버 부하 급증 주의
전체 퍼지 직후 모든 요청이 Cache MISS 상태가 되어 원본 서버로 Origin Pull이 집중됩니다. 트래픽이 많은 서비스라면 새벽 등 트래픽이 적은 시간대에 실행하고, 원본 서버의 CPU·메모리·응답 시간을 실시간으로 모니터링하세요.

상황별 퍼지 가이드

상황권장 퍼지 유형입력 예시
특정 이미지·파일 1~수십 개 수정URL 퍼지/images/banner.jpg
/css/main.css
특정 디렉토리 전체 교체패턴 퍼지/images/*
특정 확장자 전체 갱신패턴 퍼지/*.css, /*.js
CDN 캐시 설정 변경 후 반영패턴 퍼지 또는 전체 퍼지/* 또는 전체 선택
대규모 배포·전체 사이트 리뉴얼전체 퍼지 (저트래픽 시간대)
이미지 최적화 설정 변경패턴 퍼지/images/*, /*.jpg