CDN 개념 이해하기
CDN을 처음 접하는 분을 위해 핵심 개념을 쉽게 설명합니다.
CDN이란?
What is CDN?
CDN은 전 세계에 분산된 서버(엣지 노드) 네트워크를 통해 콘텐츠를 사용자 가까이에서 빠르게 전달하는 서비스입니다.
CDN is a service that delivers content quickly to users through a globally distributed network of servers (edge nodes).
실제 콘텐츠가 저장된 고객 서버. CDN 도입 후 전체 요청의 99% 이상은 원본에 도달하지 않습니다.
The customer server where actual content is stored. After CDN adoption, 99% or more of all requests never reach the origin.
사용자와 가까운 위치에 배치된 M2Live CDN 서버. 캐싱된 콘텐츠를 원본 요청 없이 즉시 응답합니다.
M2Live CDN servers placed near users. Responds instantly with cached content without requesting the origin.
엣지 노드에 임시 저장된 콘텐츠. TTL 동안 유지되며 반복 요청을 처리합니다.
Content temporarily stored at edge nodes. Maintained for the TTL duration and used to serve repeated requests.
캐시 유지 시간. 만료 후 다음 요청 시 원본에서 새 콘텐츠를 가져와 다시 캐싱합니다.
Cache retention time. After expiry, the next request fetches fresh content from the origin and re-caches it.
Cache MISS 시 CDN이 원본 서버에서 콘텐츠를 가져오는 동작. Origin Pull이 적을수록 CDN 효율이 높습니다.
The action of CDN fetching content from the origin server on a Cache MISS. Fewer Origin Pulls mean higher CDN efficiency.
캐시를 강제 삭제합니다. 원본 변경 후 CDN에 즉시 반영할 때 사용합니다.
Forcibly deletes the cache. Used to immediately reflect origin changes in the CDN.
캐시 HIT vs MISS
Cache HIT vs MISS
캐시 히트율 (Cache Hit Ratio)
Cache Hit Ratio
| 히트율 | 상태 | 조치 |
|---|---|---|
| 99% 이상 | 최적 | 현재 설정 유지 |
| 90~99% | 양호 | TTL 연장 검토 |
| 70~90% | 개선 필요 | Cache-Control 헤더 및 TTL 점검 |
| 70% 미만 | CDN 효과 저조 | 즉시 기술지원팀 문의 |
| Hit Ratio | Status | Action |
|---|---|---|
| 99% or above | Optimal | Maintain current settings |
| 90~99% | Good | Consider extending TTL |
| 70~90% | Needs improvement | Review Cache-Control header and TTL |
| Below 70% | Low CDN effectiveness | Contact technical support immediately |
HTTP 캐시 헤더 가이드
HTTP Cache Header Guide
CDN 서비스는 원본 서버의 Cache-Control 헤더를 최우선으로 준수합니다.
원본 서버에서 콘텐츠의 용도에 알맞은 캐시 정책을 내려주시면, CDN이 훨씬 더 효율적으로 작동하여 서버 부하를 줄이고 최상의 전송 속도를 제공할 수 있습니다.
The CDN service respects the Cache-Control header from the origin server as the highest priority.
Providing appropriate cache policies from the origin server allows the CDN to operate far more efficiently, reducing server load and delivering the best transfer speeds.
| 헤더 | 동작 | 권장 대상 |
|---|---|---|
Cache-Control: max-age=86400 | 1일 캐싱 | 정적 이미지 (JPG, PNG 등) |
Cache-Control: max-age=2592000 | 1달 캐싱 | 비디오 (MP4 등 대용량 미디어) |
Cache-Control: max-age=300 | 5분 캐싱 | 업데이트가 잦은 CSS, JS |
Cache-Control: no-cache | 매 요청마다 재검증 | 자주 변경되는 HTML 문서 |
| Header | Behavior | Recommended for |
|---|---|---|
Cache-Control: max-age=86400 | Cache for 1 day | Static images (JPG, PNG, etc.) |
Cache-Control: max-age=2592000 | Cache for 1 month | Video (MP4 and other large media) |
Cache-Control: max-age=300 | Cache for 5 minutes | Frequently updated CSS, JS |
Cache-Control: no-cache | Revalidate on every request | Frequently changing HTML documents |
빠른 시작 가이드
M2Live Cloud CDN을 처음 구성하는 7단계 가이드입니다.
시작 전 체크리스트
Pre-start Checklist
| 항목 | 내용 | 필수 |
|---|---|---|
| 서비스 도메인 | 서브도메인 권장 (예: cdn.myservice.com) | 필수 |
| 원본 서버 주소 | 실제 콘텐츠가 있는 서버 IP/도메인 | 필수 |
| SSL 인증서 | 인증서, 키파일, 체인인증서(HTTPS 서비스 시) | HTTPS 시 필수 |
| DNS 편집 권한 | CNAME 레코드 추가 권한 | 필수 |
| Item | Details | Required |
|---|---|---|
| Service Domain | Subdomain recommended (e.g. cdn.myservice.com) | Required |
| Origin Server Address | Server IP/domain where actual content resides | Required |
| SSL Certificate | Certificate, key file, chain certificate (for HTTPS) | Required for HTTPS |
| DNS Edit Permission | Permission to add CNAME records | Required |
단계별 설정
Step-by-step Configuration
cdn.myservice.com 300 IN CNAME cdn.myservice.service1.m2live.io.cdn.myservice.com 300 IN CNAME cdn.myservice.service1.m2live.io.86400s+, HTML 300s 이하를 권장합니다.86400s+, HTML 300s or less.콘텐츠 유형별 권장 TTL
Recommended TTL by Content Type
- API 엔드포인트에 긴 TTL — 모든 사용자에게 동일 캐시가 반환됩니다.
- 로그인 페이지 캐싱 — 다른 사용자의 개인정보가 노출될 수 있습니다.
- 원본 IP 외부 노출 — CDN 도입 후에도 원본 IP가 공개되면 직접 공격이 가능합니다.
- Long TTL on API endpoints — The same cached response is returned to all users.
- Caching login pages — Personal data of other users may be exposed.
- Exposing origin IP externally — If the origin IP is public even after CDN adoption, direct attacks are possible.
도메인 관리
CDN 서비스에 연결할 도메인을 신청하고, DNS · 인증서 · 원본 서버 세 가지 상태를 실시간으로 확인합니다.
도메인 연결 신청
Domain Connection Request
도메인 연결 신청 버튼을 클릭해 팝업을 작성합니다. 운영팀이 호스팅을 발급하면 DNS 설정 단계로 진행할 수 있습니다.
Click the Domain Connection Request button to fill in the popup. Once the operations team issues the hosting, you can proceed to the DNS configuration step.
| 항목 | 설명 | 입력 예시 |
|---|---|---|
| 도메인 필수 | CDN으로 서빙할 도메인. 루트 도메인(example.com)은 불가하며 반드시 서브도메인으로 신청해야 합니다. |
cdn.myservice.comimg.myservice.com |
| 설명 필수 | 도메인 용도를 알아보기 쉬운 메모. 팀원 간 운영 목적 구분에 유용합니다. | 이미지 CDN (상품 사진)동영상 스트리밍 |
| Item | Description | Input Example |
|---|---|---|
| Domain Required | The domain to serve via CDN. Root domains (example.com) are not allowed — you must apply with a subdomain. |
cdn.myservice.comimg.myservice.com |
| Description Required | A note describing the domain's purpose. Useful for distinguishing operational purposes among team members. | Image CDN (product photos)Video streaming |
cdn., img. 등 서브도메인으로 신청하세요. ALIAS(ANAME) 레코드가 필요한 경우 기술지원팀에 문의하세요.
Per DNS standards, CNAME records cannot be set on root domains. Always apply using a subdomain such as cdn. or img.. If you need an ALIAS (ANAME) record, contact the technical support team.
서비스 상태 — 3가지 진단 항목
Service Status — 3 Diagnostic Items
도메인을 선택하면 DNS · 인증서 · 원본 서버 상태를 실시간으로 확인할 수 있습니다. 각 항목의 정상 기준과 이상 시 조치 방법은 아래 표를 참고하세요.
Select a domain to check the status of DNS · Certificate · Origin Server in real time. Refer to the table below for normal criteria and remediation steps for each item.
| 항목 | 주요 확인 포인트 | 이상 시 조치 |
|---|---|---|
| ① 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 응답 → 원본 서버 점검 후 기술지원팀 연락. |
| Item | Key Check Points | Action on Anomaly |
|---|---|---|
| ① DNS |
Verify that the A record points to the M2Live CDN IP range. Response time under 100ms is normal. DNS TTL: initially 30–300s, recommended 3600s+ after stabilization. |
CNAME/A record not set or still propagating → Check DNS records. Propagation may take up to 48 hours. |
| ② Certificate |
Verify that the Subject includes the service domain. Check that it is within the validity period. Prepare renewal if 30 days or less remain. |
Browser warning appears immediately on expiry → Re-register new certificate under the SSL tab. |
| ③ Origin Server |
Check that at least 1 IP is available. 0 available IPs indicates an origin failure. |
0 available IPs or 5xx responses → Inspect origin server and contact technical support. |
*.myservice.com 와일드카드 인증서 하나로 모든 서브도메인을 커버할 수 있습니다. 갱신도 한 번에 처리됩니다.
A single *.myservice.com wildcard certificate covers all subdomains. Renewals are also handled in one step.
URL 진단 — 캐시 HIT/MISS 확인
URL Diagnostics — Cache HIT/MISS Check
서비스 상태 화면 하단 URL 진단에 리소스 경로를 입력하면 CDN 경유 여부와 캐시 상태를 즉시 확인할 수 있습니다.
Enter a resource path in the URL Diagnostics section at the bottom of the service status screen to instantly check CDN routing and cache status.
| 결과 항목 | 의미 및 이상 시 조치 |
|---|---|
| 응답 코드 | 5xx → 원본 서버 장애 / 404 → 원본 경로 오류 / 301·302 → 리다이렉트 루프 점검 |
| 캐시 상태 | 항상 MISS면 TTL 설정 또는 Cache-Control 헤더 점검 |
| CDN 경유 여부 | 미경유 시 DNS 전파 미완료 또는 CNAME/A 레코드 오류 |
| Content-Type | 기대와 다른 포맷이면 미디어 최적화 설정 또는 Accept 헤더 확인 |
| Result Item | Meaning & Action on Anomaly |
|---|---|
| Response Code | 5xx → Origin server failure / 404 → Origin path error / 301·302 → Check for redirect loop |
| Cache Status | If always MISS, check TTL settings or Cache-Control header |
| CDN Routing | Not routed → DNS propagation incomplete or CNAME/A record error |
| Content-Type | If format differs from expected, check media optimization settings or Accept header |
일반 설정
도메인 활성화, Alias(별칭 도메인), 전송 대역폭 제한, URL Rewrite 정책을 관리합니다. 각 항목은 독립적으로 켜고 끌 수 있으며, 저장 즉시 반영됩니다.
Manage domain activation, Alias (alternate domains), transfer bandwidth limits, and URL Rewrite policies. Each item can be toggled independently and takes effect immediately upon saving.
| 항목 | 개념 | 활용 예시 |
|---|---|---|
| 도메인 Alias | 하나의 CDN 설정으로 여러 도메인을 동시에 서빙합니다. | img.myservice.com과 cdn.myservice.com을 단일 CDN으로 연결 |
| 전송 대역폭 제한 | 도메인당 최대 전송 속도(Mbps)를 제한합니다. | 서비스 품질을 낮추어 과금량을 줄입니다. |
| URL Rewrite | 정규표현식으로 요청 URL을 CDN 엣지에서 재매핑합니다. 원본 서버나 클라이언트 변경 없이 URL 구조를 투명하게 전환합니다. | 구 경로 /old/(.*) → 신 경로 /new/$1 |
| Item | Concept | Usage Example |
|---|---|---|
| Domain Alias | Serve multiple domains simultaneously with a single CDN configuration. | Link img.myservice.com and cdn.myservice.com to a single CDN |
| Transfer Bandwidth Limit | Limits the maximum transfer speed (Mbps) per domain. | Reduce service quality to lower billing costs. |
| URL Rewrite | Remaps request URLs at the CDN edge using regular expressions. Transparently changes URL structure without modifying the origin server or client. | Old path /old/(.*) → New path /new/$1 |
① 도메인 활성화
① Domain Activation
CDN 서비스 전체를 ON/OFF하는 마스터 스위치입니다. 비활성화하면 해당 도메인의 모든 CDN 기능(캐시, 이미지·비디오 최적화, 접근 제어 등)이 즉시 중단됩니다. 중단 전 반드시 도메인을 다른 서비스로 라우팅하도록 변경해야 합니다.
This is the master switch that turns the entire CDN service ON/OFF. When deactivated, all CDN functions for that domain (cache, image/video optimization, access control, etc.) stop immediately. Before deactivating, make sure to reroute the domain to another service.
② 도메인 Alias (별칭 도메인)
② Domain Alias (Alternate Domain)
Alias는 하나의 CDN 설정(원본 서버, 캐시 정책, SSL 등)을 여러 도메인이 공유할 수 있게 해주는 기능입니다. 예를 들어 이미지용 img.myservice.com과 일반 콘텐츠용 cdn.myservice.com이 동일한 원본과 설정을 사용한다면, 별도 CDN을 만들지 않고 Alias로 등록하면 됩니다.
Alias allows multiple domains to share a single CDN configuration (origin server, cache policy, SSL, etc.). For example, if img.myservice.com for images and cdn.myservice.com for general content use the same origin and settings, register one as an Alias instead of creating a separate CDN.
③ 전송 대역폭 제한
③ Transfer Bandwidth Limit
도메인당 CDN에서 전송할 수 있는 최대 속도를 Mbps 단위로 제한합니다. 트래픽을 억제하여 트래픽 비용을 예측 가능하게 관리할 수 있습니다. 대신 서비스 품질(전송속도)는 저하됩니다.
Limits the maximum transfer speed (in Mbps) from the CDN per domain. Throttling traffic allows predictable cost management, but at the expense of service quality (transfer speed).
| 설정값 | 동작 | 권장 시나리오 |
|---|---|---|
| 비활성화 (기본) | 속도 제한 없음. CDN이 가능한 최대 속도로 전송합니다. | - |
| Setting | Behavior | Recommended Scenario |
|---|---|---|
| Disabled (default) | No speed limit. CDN transfers at the maximum possible speed. | - |
④ URL Rewrite 정책
④ URL Rewrite Policy
CDN 엣지에서 클라이언트 요청 URL을 정규표현식(RegExp) 패턴으로 매칭한 뒤, 지정한 형식으로 변조합니다. 캐싱키와 원본에 요청되는 URL 모두 바뀐 URL이 사용됩니다. 클라이언트나 원본 서버 코드를 수정하지 않고도 URL 구조를 투명하게 변경할 수 있습니다.
Matches client request URLs at the CDN edge using a regular expression (RegExp) pattern and rewrites them to the specified format. Both the cache key and the URL sent to the origin use the rewritten URL. URL structure can be transparently changed without modifying client or origin server code.
| 구성 요소 | 설명 | 예시 |
|---|---|---|
| URL 패턴 | 매칭할 정규표현식. 괄호 ()로 캡처 그룹을 만들면 치환에서 #1, #2로 참조할 수 있습니다. | ([^/]+)/(.*) |
| 치환 | 패턴이 일치했을 때 재조합할 URL. 캡처 그룹은 #1, #2 … 순서로 참조합니다. | #1.php?id=#2 |
| 변경 전 URL 로깅 | Rewrite가 적용되기 전의 원본 요청 URL을 access.log에 함께 기록합니다. 디버깅 시 유용합니다. | — |
| 대소문자 구분 | 패턴 매칭 시 대소문자를 구분할지 여부입니다. 기본값은 구분하지 않음(case-insensitive)입니다. | — |
| Component | Description | Example |
|---|---|---|
| URL Pattern | Regular expression to match. Creating capture groups with () lets you reference them as #1, #2 in the substitution. | ([^/]+)/(.*) |
| Substitution | The URL to reassemble when the pattern matches. Capture groups are referenced as #1, #2 … in order. | #1.php?id=#2 |
| Pre-rewrite URL Logging | Records the original request URL before Rewrite is applied in access.log. Useful for debugging. | — |
| Case Sensitivity | Whether to distinguish case during pattern matching. Default is case-insensitive. | — |
URL Rewrite 패턴 예시
URL Rewrite Pattern Examples
| 변환 목적 | 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 |
| Purpose | URL Pattern | Substitution | Result |
|---|---|---|---|
| Path structure conversion | ([^/]+)/(.*) |
#1.php?id=#2 |
/post/123 → /post.php?id=123 |
| Add directory prefix | (.*) |
/v2/#1 |
/api/users → /v2/api/users |
| Remove extension | (.*)\.html$ |
#1 |
/about.html → /about |
| Old path → New path | /old/(.*) |
/new/#1 |
/old/banner.jpg → /new/banner.jpg |
원본 연결 / 헤더 제어
CDN이 원본 서버(Origin Server)와 통신하는 방식 전반을 설정합니다. 프로토콜·주소·타임아웃부터 요청/응답 헤더 조작, Redirect 처리, 원본요청 URL Rewrite까지 원본 연결과 관련된 모든 항목이 이 탭에 집중되어 있습니다.
Configure all aspects of how the CDN communicates with the origin server. This tab covers everything related to origin connection: protocol, address, timeout, request/response header manipulation, redirect handling, and origin-request URL Rewrite.
Cache MISS 시 CDN 엣지가 원본 서버로 콘텐츠를 가져오는 동작. 이후 동일 요청은 캐시에서 즉시 응답합니다.
The action of the CDN edge fetching content from the origin server on a Cache MISS. Subsequent identical requests are served instantly from cache.
동일 콘텐츠에 동시 요청이 몰릴 때 Origin Pull을 1회로 병합합니다. 원본 과부하 방지 핵심 기능.
When simultaneous requests for the same content surge, merges Origin Pull into a single request. Key feature for preventing origin overload.
CDN이 원본에 요청할 때 보내는 Host 값. 원본이 Host헤더로 요청을 분기한다면 반드시 일치해야 합니다.
The Host value sent by the CDN when requesting the origin. Must match exactly if the origin routes requests based on the Host header.
연결대기(Connect)와 수신대기(Read) 두 단계의 타임아웃을 각각 설정합니다. Timeout되면 CDN의 에러처리 메커니즘이 가동됩니다.
Set separate timeouts for two stages: connection wait (Connect) and receive wait (Read). When a timeout occurs, the CDN's error-handling mechanism activates.
원본 → CDN(응답헤더 변조) 구간에서 HTTP 헤더를 추가·덮어쓰기·삭제할 수 있습니다.
Add, overwrite, or delete HTTP headers in the origin → CDN (response header manipulation) segment.
캐시키에는 영향없이 원본에 전달할 URL을 정규표현식으로 변환합니다.
Transforms the URL sent to the origin using regular expressions without affecting the cache key.
① 원본 프로토콜 / 주소
① Origin Protocol / Address
CDN 엣지가 원본 서버로 Origin Pull 요청을 보낼 때 사용할 프로토콜과 주소를 설정합니다. 여러 주소를 등록하면 라운드로빈 로드밸런싱이 적용되며, 보조 주소로 설정한 서버는 주 서버가 모두 응답 불가일 때만 투입됩니다.
Configure the protocol and address the CDN edge uses when sending Origin Pull requests to the origin server. Registering multiple addresses applies round-robin load balancing; servers set as secondary addresses are only used when all primary servers are unreachable.
| 항목 | 설명 | 권장값 |
|---|---|---|
| 원본 프로토콜 | CDN ↔ 원본 간 통신 방식. HTTP는 암호화 없이 빠르고, HTTPS는 종단간(End-to-End) 암호화를 보장합니다. | 내부망이면 HTTP, 공인망이면 HTTPS 권장 |
| 원본 주소 | IP 주소 또는 도메인. http://, https:// 접두사 없이 입력합니다. | 192.168.10.135 또는 origin.myservice.com |
| 포트(port) | 원본 서버가 수신하는 포트 번호. 기본 포트(HTTP 80, HTTPS 443)와 다를 때 지정합니다. | - |
| 보조 주소 | 주 원본 서버 전체 장애 시 자동으로 전환되는 Failover 서버입니다. | 가용성이 중요한 서비스에 설정 권장 |
| Item | Description | Recommended Value |
|---|---|---|
| Origin Protocol | Communication method between CDN ↔ origin. HTTP is fast without encryption; HTTPS guarantees end-to-end encryption. | HTTP for internal network, HTTPS for public network |
| Origin Address | IP address or domain. Enter without http:// or https:// prefix. | 192.168.10.135 or origin.myservice.com |
| Port | Port number the origin server listens on. Specify when different from the default port (HTTP 80, HTTPS 443). | - |
| Secondary Address | Failover server that automatically takes over when all primary origin servers are down. | Recommended for services where availability is critical |
② Host 헤더
② Host Header
CDN이 원본 서버에 요청을 보낼 때 HTTP Host 헤더에 어떤 값을 넣을지 결정합니다. 기본적으로는 클라이언트가 요청한 Host 값이 그대로 전달됩니다. 원본 서버가 Apache VirtualHost나 Nginx server_name으로 여러 도메인을 구분하거나, 포트가 포함된 Host를 요구하는 경우 이 옵션을 활성화해 맞춤 값을 입력합니다.
Determines what value is placed in the HTTP Host header when the CDN sends a request to the origin server. By default, the Host value requested by the client is forwarded as-is. Enable this option and enter a custom value when the origin uses Apache VirtualHost or Nginx server_name to distinguish multiple domains, or requires a Host with a port number.
③ 중복요청 병합 (Request Coalescing)
③ Duplicate Request Merging (Request Coalescing)
동일한 콘텐츠에 대해 Cache MISS 상태에서 대량의 요청이 동시에 들어올 때, CDN이 원본 서버에 Origin Pull을 단 1회만 보내고 나머지 요청은 그 응답을 기다렸다가 한꺼번에 처리하는 기능입니다. Thunder Herd Problem(캐시 만료 시 원본에 요청이 폭주하는 현상)을 방지하는 핵심 설정입니다.
When a large volume of simultaneous requests arrive for the same content in a Cache MISS state, the CDN sends only a single Origin Pull to the origin server and holds all other requests until the response arrives, then serves them all at once. This is the key setting to prevent the Thunder Herd Problem (a surge of requests to the origin when cache expires).
④ 연결대기 / 수신대기 시간 (Timeout)
④ Connection Wait / Receive Wait Time (Timeout)
CDN이 원본 서버와 통신할 때 적용되는 두 가지 타임아웃을 설정합니다. 타임아웃이 반복되면 CDN은 해당 원본을 장애로 간주하고 보조 원본으로 전환하거나 오류 응답을 반환합니다.
Configure the two types of timeouts applied when the CDN communicates with the origin server. If timeouts repeat, the CDN treats that origin as failed and switches to the secondary origin or returns an error response.
| 항목 | 의미 | 기본값 | 설정 범위 |
|---|---|---|---|
| 연결대기 시간 (Connect Timeout) |
CDN이 원본 서버에 TCP 연결을 맺을 때까지 기다리는 시간. 원본 서버가 연결 자체를 받지 못하는 경우(방화벽 차단, 서버 다운 등)에 적용됩니다. | 3초 | 0 ~ 5초 (0 = 기본값 적용) |
| 수신대기 시간 (Read Timeout) |
TCP 연결 후 원본 서버가 데이터를 전송하지 않는 유휴 시간의 허용 한도. 연결은 됐지만 응답이 느린 경우(처리 지연, 대용량 파일 등)에 적용됩니다. | 10초 | 0 ~ 60초 (0 = 기본값 적용) |
| Item | Meaning | Default | Range |
|---|---|---|---|
| Connection Wait Time (Connect Timeout) | Time the CDN waits to establish a TCP connection to the origin server. Applies when the origin server cannot accept the connection (firewall block, server down, etc.). | 3 sec | 0–5 sec (0 = apply default) |
| Receive Wait Time (Read Timeout) | Idle time allowed after TCP connection is established before the origin transmits data. Applies when the connection succeeds but the response is slow (processing delay, large file, etc.). | 10 sec | 0–60 sec (0 = apply default) |
⑤ 세션 재사용 (Keep-Alive / Connection Reuse)
⑤ Session Reuse (Keep-Alive / Connection Reuse)
CDN과 원본 서버 사이의 TCP 연결을 요청마다 새로 맺지 않고 재사용하는 기능입니다. 비활성화 시 매 HTTP 요청마다 TCP 3-Way Handshake가 새로 발생해 연결 오버헤드가 증가합니다. 원본 서버가 Keep-Alive를 지원하면 반드시 활성화를 권장합니다.
Reuses TCP connections between the CDN and origin server rather than establishing a new connection for each request. When disabled, a new TCP 3-Way Handshake is required for every HTTP request, increasing connection overhead. Strongly recommended to enable if the origin server supports Keep-Alive.
⑥ 비표준헤더 캐싱
⑥ Non-Standard Header Caching
원본 서버가 응답에 포함하는 HTTP 헤더 중 CDN이 캐시와 함께 저장할 헤더 범위를 결정합니다. 기본적으로 CDN은 보안 문제를 방지하기 위해 표준으로 정의된 헤더만 캐싱합니다. Set-Cookie 헤더는 어떤 설정에서도 캐싱되지 않습니다.
Determines the range of HTTP headers included in the origin server's response that the CDN will store alongside the cache. By default, the CDN caches only standard-defined headers to prevent security issues. The Set-Cookie header is never cached regardless of the setting.
| 모드 | 동작 | 권장 상황 |
|---|---|---|
| 표준 헤더만 | RFC 표준 헤더(Cache-Control, Content-Type, ETag 등)만 캐싱합니다. | 일반적인 정적 콘텐츠 CDN |
| 확장 표준 헤더 + 비표준 헤더 | 표준 헤더 + 원본 서버가 추가한 커스텀 헤더(X-Custom-* 등)까지 함께 캐싱합니다. | 커스텀 헤더를 클라이언트에 전달해야 하는 API/미디어 서비스 |
| Mode | Behavior | Recommended Use |
|---|---|---|
| Standard Headers Only | Only RFC standard headers (Cache-Control, Content-Type, ETag, etc.) are cached. | General static content CDN |
| Extended Standard + Non-Standard Headers | Standard headers + custom headers added by the origin server (X-Custom-*, etc.) are cached together. | API/media services that need to forward custom headers to clients |
어떤 설정이라도 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
The Set-Cookie header is never cached regardless of the setting.
List: 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 지원
⑦ Origin ETag Support
ETag는 콘텐츠의 버전을 나타내는 해시 값입니다. 원본 서버가 응답에 ETag를 포함하면 CDN이 이를 저장해 두고, 이후 캐시를 재검증할 때 원본에 If-None-Match 헤더로 전달합니다. 원본이 "변경 없음"을 확인하면 304로 응답해 불필요한 데이터 전송을 줄입니다.
ETag is a hash value representing the version of content. When the origin server includes an ETag in its response, the CDN stores it; during subsequent cache revalidation, it is sent to the origin as an If-None-Match header. If the origin confirms "no change," it responds with 304, reducing unnecessary data transmission.
⑧ Redirect 재요청
⑧ Redirect Re-request
원본 서버가 301/302 등 Redirect 응답을 반환했을 때 CDN이 Location 헤더의 URL로 자동으로 재요청해 최종 콘텐츠를 가져오는 기능입니다. 비활성화 시 CDN은 Redirect 응답 자체를 캐시하고 클라이언트에 그대로 전달해, 클라이언트가 직접 Redirect를 따라갑니다.
When the origin server returns a Redirect response such as 301/302, the CDN automatically re-requests the URL in the Location header to retrieve the final content. When disabled, the CDN caches the redirect response itself and forwards it to the client, leaving the client to follow the redirect directly.
| 항목 | 설명 | 예시 |
|---|---|---|
| Redirect 상태코드 | 재요청을 트리거할 HTTP 상태코드를 지정합니다. 3xx는 300번대 전체를 의미합니다. | 3xx, 301, 302 |
| URL 패턴 | 재요청을 적용할 URL 패턴. 빈값이면 전체 URL에 적용됩니다. 와일드카드 *는 모든 패턴을 의미합니다. | *.mp4, /videos/* |
| Item | Description | Example |
|---|---|---|
| Redirect Status Code | Specifies the HTTP status codes that trigger a re-request. 3xx means all 300-series codes. | 3xx, 301, 302 |
| URL Pattern | URL pattern to apply the re-request to. If empty, applies to all URLs. Wildcard * matches all patterns. | *.mp4, /videos/* |
⑨ User-Agent 헤더
⑨ User-Agent Header
CDN이 원본 서버로 Origin Pull 요청을 보낼 때 전송하는 User-Agent 헤더 값을 설정합니다. 기본값은 M2Live 클라우드 서비스명입니다. 원본 서버가 특정 User-Agent만 허용하거나, 클라이언트 User-Agent를 그대로 전달해야 할 때 변경합니다.
Configure the User-Agent header value sent when the CDN makes Origin Pull requests to the origin server. The default value is the M2Live cloud service name. Change this when the origin server only allows a specific User-Agent, or when the client's User-Agent must be forwarded as-is.
⑩ X-Forwarded-For (XFF) 헤더
⑩ X-Forwarded-For (XFF) Header
X-Forwarded-For는 클라이언트의 실제 IP 주소를 프록시(CDN)를 거쳐 원본 서버에 전달하기 위한 표준 HTTP 헤더입니다. CDN을 거치면 원본 서버는 CDN의 IP만 보게 되므로, 클라이언트 IP 기반의 로깅·접근 제어·지역 판단이 필요하다면 반드시 이 기능을 활성화해야 합니다.
X-Forwarded-For is a standard HTTP header for passing the client's real IP address through a proxy (CDN) to the origin server. Since the origin server only sees the CDN's IP when traffic passes through it, this feature must be enabled if client IP-based logging, access control, or geolocation is needed.
| 동작 | 설명 |
|---|---|
| 비활성화 | 클라이언트 X-Forwarded-For 헤더의 맨 좌측 필드만 원본 서버에 전달합니다. |
| 활성화 | 클라이언트가 보낸 X-Forwarded-For 헤더에 클라이언트 IP(=Remote Socket IP)를 추가해 전달합니다. 클라이언트가 헤더를 보내지 않았다면 클라이언트 IP만 원본에 전달합니다. |
| Behavior | Description |
|---|---|
| Disabled | Only the leftmost field of the client X-Forwarded-For header is forwarded to the origin server. |
| Enabled | The client IP (= Remote Socket IP) is appended to the X-Forwarded-For header sent by the client and forwarded. If the client did not send the header, only the client IP is forwarded to the origin. |
활성화하면 클라이언트가 보낸 X-Forwarded-For헤더에 클라이언트 IP를 추가합니다. 만약 클라이언트가 해당 헤더를 보내지 않았다면 X-Forwarded-For헤더의 값으로 클라이언트 IP만 원본서버로 전달합니다.
When enabled, the client IP is appended to the X-Forwarded-For header sent by the client. If the client did not send the header, only the client IP is forwarded to the origin server as the X-Forwarded-For value.
⑪ 요청헤더 변조
⑪ Request Header Manipulation
CDN이 원본 서버로 요청을 전달할 때 HTTP 헤더를 동적으로 추가·덮어쓰기·삭제하는 기능입니다. 특정 URL 패턴에만 선택적으로 적용할 수 있습니다.
Dynamically add, overwrite, or delete HTTP headers when the CDN forwards requests to the origin server. Can be applied selectively to specific URL patterns only.
| 항목 | 설명 | 예시 |
|---|---|---|
| 헤더 이름 | 추가·변경·삭제할 HTTP 헤더 이름 | x-media-type |
| 값 | 헤더에 설정할 값. 삭제 액션 선택 시 비워둡니다. | video/mp4 |
| URL 패턴 | 이 규칙을 적용할 URL 패턴. 빈값이면 전체 URL에 적용됩니다. | /*.mp4 |
| 액션 | 추가(없으면 추가, 있으면 덮어쓰기) / 강제 덮어쓰기 / 삭제 중 선택 | 추가 (헤더가 존재하면 덮어쓰고 없다면 추가) |
| Item | Description | Example |
|---|---|---|
| Header Name | Name of the HTTP header to add, modify, or delete | x-media-type |
| Value | Value to set for the header. Leave empty when the Delete action is selected. | video/mp4 |
| URL Pattern | URL pattern this rule applies to. If empty, applies to all URLs. | /*.mp4 |
| Action | Choose from: Add (add if absent, overwrite if present) / Force Overwrite / Delete | Add (overwrite if header exists, add if not) |
⑫ 응답헤더 변조
⑫ Response Header Manipulation
원본 서버가 CDN에 응답을 보낼 때 HTTP 헤더를 동적으로 추가·덮어쓰기·삭제하는 기능입니다. 요청헤더 변조와 동일한 구조지만 방향이 반대(원본 → CDN)입니다.
Dynamically add, overwrite, or delete HTTP headers when the origin server sends a response to the CDN. Identical structure to request header manipulation but in the opposite direction (origin → CDN).
- 요청헤더 추가: 원본 서버 인증을 위해
X-CDN-Secret: <token>헤더를 모든 Origin Pull에 삽입 - 응답헤더 추가: 원본이 CORS 헤더를 반환하지 않을 때
Access-Control-Allow-Origin: *를 응답에 삽입 - 응답헤더 삭제: 원본이 반환하는 민감한
Server헤더를 제거해 서버 정보 노출 방지
- Add request header: Insert
X-CDN-Secret: <token>header into all Origin Pulls for origin server authentication - Add response header: Inject
Access-Control-Allow-Origin: *into responses when the origin does not return CORS headers - Delete response header: Remove the sensitive
Serverheader returned by the origin to prevent server information exposure
⑬ 원본요청 URL Rewrite
⑬ Origin-Request URL Rewrite
클라이언트 요청 URL을 원본 서버에 전달하기 전에 정규표현식으로 변환합니다. 일반 설정의 URL Rewrite와 달리 캐시키에 영향을 주지 않습니다. 즉, 클라이언트 입장에서는 원래 URL로 캐시가 관리되지만, 원본 서버에는 변환된 URL로 요청이 전달됩니다.
Transforms the client request URL using regular expressions before forwarding it to the origin server. Unlike the URL Rewrite in General Settings, this does not affect the cache key. That is, from the client's perspective, cache is managed using the original URL, while the origin server receives the transformed URL.
| 구분 | 일반 설정 URL Rewrite | 원본요청 URL Rewrite |
|---|---|---|
| 변환 시점 | CDN 엣지 진입 시 (캐시키 변경됨) | 원본 전달 직전 (캐시키 불변) |
| 캐시키 영향 | 있음 — 변환된 URL로 캐시 저장 | 없음 — 원본 URL로 캐시 저장 |
| 주요 용도 | 클라이언트에게 노출되는 URL 구조 변경 | 원본 서버의 내부 경로 매핑 |
| Category | General Settings URL Rewrite | Origin-Request URL Rewrite |
|---|---|---|
| Transform Point | At CDN edge entry (cache key is changed) | Just before forwarding to origin (cache key unchanged) |
| Cache Key Impact | Yes — cached using the transformed URL | No — cached using the original URL |
| Primary Use | Changing the URL structure exposed to clients | Internal path mapping on the origin server |
도메인별로 독립 설정되므로 도메인이름은 입력하지 않습니다.
Configured independently per domain — do not include the domain name.
SSL / HTTPS
클라이언트(브라우저)와 CDN 엣지 노드 간 HTTPS 암호화 통신을 설정합니다. SSL 인증서를 등록하면 보안 HTTPS 프로토콜을 통해 콘텐츠를 안전하게 전송할 수 있습니다.
Configure HTTPS encrypted communication between the client (browser) and CDN edge nodes. Registering an SSL certificate enables secure content delivery via the HTTPS protocol.
- 사용자 ↔ CDN 엣지: 이 페이지에서 등록한 SSL 인증서로 HTTPS 암호화
- CDN 엣지 ↔ 원본 서버: 원본 연결/헤더 제어 탭에서 HTTPS 프로토콜 선택
- 두 구간 모두 HTTPS로 설정해야 완전한 종단간(End-to-End) 암호화가 보장됩니다.
- User ↔ CDN Edge: HTTPS encryption using the SSL certificate registered on this page
- CDN Edge ↔ Origin Server: Select HTTPS protocol in the Origin Connection / Header Control tab
- Both segments must be set to HTTPS to guarantee complete end-to-end encryption.
SSL/TLS 핵심 개념
SSL/TLS Core Concepts
CA(인증기관)가 발급한 공개 인증서. 도메인 소유권을 증명하며 브라우저가 신뢰하는 기관의 서명이 포함되어 있습니다. .pem, .crt, .cer 형식을 지원합니다.
A public certificate issued by a CA (Certificate Authority). Proves domain ownership and includes a signature from a browser-trusted authority. Supports .pem, .crt, .cer formats.
인증서와 쌍을 이루는 비밀 키. 암호화된 통신을 복호화하는 데 사용됩니다. 절대 외부에 노출해서는 안 됩니다. .pem, .key 형식을 지원합니다.
The private key paired with the certificate. Used to decrypt encrypted communications. Must never be exposed externally. Supports .pem, .key formats.
중간 CA(Intermediate CA) 인증서 묶음. 브라우저가 루트 CA까지 신뢰 경로를 확인하는 데 필요합니다. 없으면 일부 브라우저/기기에서 경고가 발생합니다. .pem, .crt, .cer 형식을 지원합니다.
A bundle of Intermediate CA certificates. Required for browsers to verify the trust path to the root CA. Without it, some browsers/devices may show warnings. Supports .pem, .crt, .cer formats.
암호화 프로토콜 버전. TLSv1.2는 구형 클라이언트 호환성을 위해, TLSv1.3은 보안·성능 향상을 위해 권장됩니다. 기본값은 TLSv1.2 + TLSv1.3 동시 지원입니다.
Encryption protocol version. TLSv1.2 is recommended for compatibility with older clients; TLSv1.3 for improved security and performance. The default supports both TLSv1.2 and TLSv1.3 simultaneously.
인증서 파일 구성
Certificate File Configuration
| 파일 | 역할 | 지원 형식 | 필수 여부 |
|---|---|---|---|
| 증명서 (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 | 선택 (기본값 권장) |
| File | Role | Supported Formats | Required |
|---|---|---|---|
| Certificate (Certificate) |
Public certificate issued by a CA. Proves domain ownership and server identity. | .pem .crt .cer |
Required |
| Private Key (Private Key) |
Secret key paired with the certificate. Used by the server to decrypt encrypted communications. | .pem .key |
Required |
| Certificate Chain (Chain / Bundle) |
Bundle of Intermediate CA certificates. Required for browsers to trace the trust path to the root CA. | .pem .crt .cer |
Recommended (some environments show warnings without it) |
| TLS Version | Specifies the TLS protocol version to apply to this certificate. If not selected, the default (TLSv1.2, TLSv1.3) is used. | TLSv1.2 / TLSv1.3 | Optional (default recommended) |
HTTPS 활성화 및 인증서 관리
HTTPS Activation and Certificate Management
_wildcard_.m2live.io_2025090589371.crt.pem_wildcard_.m2live.io_2025090589371.key.pemroot-chain-bundle.pem_wildcard_.m2live.io_2025090589371.crt.pem_wildcard_.m2live.io_2025090589371.key.pemroot-chain-bundle.pemSSL 인증서 추가 — 입력 항목
Add SSL Certificate — Input Fields
SSL 인증서 추가 버튼을 클릭하면 아래 팝업이 열립니다. 각 파일은 직접 내용을 붙여넣거나 파일 첨부 버튼으로 업로드할 수 있습니다.
Click the Add SSL Certificate button to open the popup below. Each file can be pasted directly or uploaded using the Attach File button.
TLS 버전 선택 가이드
TLS Version Selection Guide
| 버전 | 보안 수준 | 호환성 | 권장 여부 |
|---|---|---|---|
| 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+ | 권장 (보안) |
| Version | Security Level | Compatibility | Recommended |
|---|---|---|---|
| TLSv1.0 | Low — POODLE, BEAST vulnerabilities | Legacy IE6–8, Android 2.x | Prohibited |
| TLSv1.1 | Low — modern cipher suites not supported | Legacy browsers | Prohibited |
| TLSv1.2 | Good — widely used today | Chrome 30+, iOS 5+, Android 4.4+ | Recommended (compatibility) |
| TLSv1.3 | High — shorter handshake, weak ciphers removed | Chrome 70+, Firefox 63+, iOS 12.2+ | Recommended (security) |
와일드카드 인증서 활용
Using Wildcard Certificates
와일드카드 인증서(*.myservice.com)는 동일 도메인의 모든 서브도메인에 하나의 인증서를 적용할 수 있습니다. 서브도메인마다 개별 인증서를 발급·등록·갱신하는 부담을 줄이고, 관리 포인트를 단일화할 수 있습니다.
A wildcard certificate (*.myservice.com) applies a single certificate to all subdomains of the same domain. This reduces the burden of issuing, registering, and renewing individual certificates per subdomain and centralizes management.
| 인증서 유형 | 커버 범위 | 관리 난이도 |
|---|---|---|
| 단일 도메인 | cdn.myservice.com 1개만 |
서브도메인 추가마다 재발급 필요 |
| 와일드카드 (Wildcard) |
*.myservice.com → 모든 1단계 서브도메인 |
갱신 1회로 전체 적용 |
| Certificate Type | Coverage Scope | Management Complexity |
|---|---|---|
| Single Domain | cdn.myservice.com only |
Re-issuance required for each new subdomain |
| Wildcard (Wildcard) |
*.myservice.com → all first-level subdomains |
Single renewal applies to all |
인증서 갱신 체크리스트
Certificate Renewal Checklist
| 단계 | 작업 | 비고 |
|---|---|---|
| 1 | CA에서 새 인증서 발급 (증명서 + 개인 키 + 체인) | 만료 30일 전 시작 권장 |
| 2 | SSL 탭 → 기존 인증서 편집 또는 삭제 후 재추가 | 편집 시 서비스 중단 없이 교체 가능 |
| 3 | 도메인 관리 → 서비스 상태에서 인증서 항목 "유효" 확인 | 반영까지 최대 수 분 소요 |
| 4 | URL 진단으로 HTTPS 정상 응답 확인 | 응답 코드 200, CDN 경유 여부 확인 |
| Step | Task | Notes |
|---|---|---|
| 1 | Obtain a new certificate from the CA (certificate + private key + chain) | Start at least 30 days before expiry |
| 2 | SSL tab → Edit or Delete and re-add the existing certificate | Editing allows replacement without service interruption |
| 3 | Domain Management → Service Status: confirm certificate shows "Valid" | May take up to several minutes to take effect |
| 4 | Use URL Diagnostics to confirm normal HTTPS response | Check response code 200 and CDN routing |
캐시 (TTL)
TTL(Time To Live)은 콘텐츠가 CDN 엣지에 캐싱되는 시간입니다. TTL 우선순위 제어부터 응답코드별 TTL, no-cache/no-store 정책, 커스텀 TTL, 갱신 예외, 캐시키 구성, POST 캐싱, 바이패스까지 캐시와 관련된 모든 설정이 이 탭에 집중되어 있습니다.
TTL (Time To Live) is the duration content is cached at CDN edges. This tab covers all cache-related settings: TTL priority control, per-response-code TTL, no-cache/no-store policies, custom TTL, stale-while-revalidate, cache key configuration, POST caching, and bypass.
- TTL ↑ 길수록 → 히트율 높아짐, 원본 부하 감소 → 단, 콘텐츠 변경 시 이전 버전이 계속 제공될 수 있음
- TTL ↓ 짧을수록 → 항상 최신 콘텐츠 제공 → 단, 히트율 낮아지고 원본 부하 증가
- 최적 전략: 정적 콘텐츠 긴 TTL + URL 버전 해시(cache busting) + 변경 시 퍼지(Purge)
- Longer TTL ↑ → Higher hit ratio, reduced origin load → However, old versions may continue to be served when content changes
- Shorter TTL ↓ → Always serves the latest content → However, hit ratio drops and origin load increases
- Optimal strategy: Long TTL for static content + URL version hash (cache busting) + Purge on change
① TTL 적용 우선순위
① TTL Application Priority
CDN은 원본 서버의 Cache-Control 헤더를 기본적으로 준수하지만, 운영 필요에 따라 CDN 콘솔에서 강제로 우선순위를 변경할 수 있습니다. 우선순위 목록은 드래그로 순서를 조정할 수 있으며, 목록 상단일수록 높은 우선순위로 적용됩니다.
The CDN follows the origin server's Cache-Control header by default, but you can force-override priority from the CDN console as needed. The priority list can be reordered by dragging; items higher in the list have higher priority.
| TTL 소스 | 설명 | 우선순위 기본값 |
|---|---|---|
| 커스텀 TTL | URL 패턴별로 콘솔에서 직접 지정한 TTL | 1순위 (최고) |
| 원본 max-age | 원본의 Cache-Control: max-age 값 | 2순위 |
| 원본 no-cache | 원본이 Cache-Control: no-cache로 응답 — 매 요청마다 원본에서 재검증 | 3순위 |
| 응답코드별 설정 | 응답코드(2xx/3xx/4xx/5xx)별로 콘솔에서 지정한 TTL | 4순위 |
| 원본 no-store | 원본이 Cache-Control: no-store로 응답 — 캐싱 완전 불가 | 5순위 |
| 원본 s-maxage | 원본이 CDN 전용으로 지정한 Cache-Control: s-maxage 값 | 6순위 (최저) |
| TTL Source | Description | Default Priority |
|---|---|---|
| Custom TTL | TTL specified directly in the console per URL pattern | 1st (highest) |
| Origin max-age | The origin's Cache-Control: max-age value | 2nd |
| Origin no-cache | Origin responds with Cache-Control: no-cache — revalidate from origin on every request | 3rd |
| Per-Response-Code Setting | TTL specified in the console per response code (2xx/3xx/4xx/5xx) | 4th |
| Origin no-store | Origin responds with Cache-Control: no-store — caching completely prohibited | 5th |
| Origin s-maxage | The origin's Cache-Control: s-maxage value designated for CDN only | 6th (lowest) |
② 응답코드별 TTL
② TTL by Response Code
원본 서버의 HTTP 응답 상태코드 계열별로 TTL을 개별 설정합니다. 오류 응답(4xx/5xx)이 길게 캐싱되면 원본 문제가 해결된 후에도 사용자가 계속 오류를 받게 되므로 짧게 유지해야 합니다. 접속실패·수신실패 시의 동작 정책도 함께 설정합니다.
Set TTL individually per HTTP response status code family from the origin server. Error responses (4xx/5xx) should be kept short — if cached too long, users will continue receiving errors even after the origin issue is resolved. Also configure the policy for connection failures and receive failures.
| 응답코드 | 의미 | 권장 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으로 응답하고 접속실패 시간만큼 유지 |
| Response Code | Meaning | Recommended TTL | Reason |
|---|---|---|---|
| 2xx 200, 201, 204, etc. | Success response. Normally returned content | 86400s (1 day) or more | The longer static content is cached, the higher the hit ratio |
| 3xx 301, 302, 303, etc. | Redirect response | 300s (5 minutes) | Redirect destination may change — a moderate value is recommended |
| 4xx 400, 401, 403, etc. | Client error (bad request, unauthorized, etc.) | 3s | Must switch to normal response immediately once the error is fixed |
| 5xx 500, 501, 502, etc. | Server error (origin failure, overload, etc.) | 3s | Normal service must resume immediately after origin recovery |
| Connection Failure | CDN could not establish a TCP connection to the origin | 3s | If content is already cached, extend TTL by the connection failure duration (sec) |
| Receive Failure | Origin did not transmit data after connection was established | 3s | If origin failure occurs during new caching, respond with 500 and retain for the connection failure duration |
- 이미 캐싱된 콘텐츠라면 접속실패 시간(초)만큼 TTL을 연장한다.
- 신규 캐싱시 원본 장애가 발생하면 500으로 응답하고 접속실패 시간만큼 유지합니다.
- If content is already cached, extend TTL by the connection failure duration (sec).
- If an origin failure occurs during new caching, respond with 500 and retain for the connection failure duration.
③ no-cache 응답 정책
③ no-cache Response Policy
원본 서버가 200번대 성공 상태코드(200 OK 등)를 Cache-Control: no-cache와 함께 응답한 경우, CDN이 어떻게 동작할지를 정의합니다. no-cache는 "캐시하지 말라"가 아니라 "캐시하되, 사용 전 반드시 원본에서 재검증하라"는 의미입니다.
Defines how the CDN behaves when the origin responds with a 2xx success code (e.g. 200 OK) along with Cache-Control: no-cache. no-cache does not mean "do not cache" — it means "cache it, but always revalidate with the origin before serving."
| 옵션 | 동작 | 권장 상황 |
|---|---|---|
| 기본값 사용 | CDN 기본 동작 방식을 따릅니다. (TTL: 5초) | 별도 정책이 필요 없는 일반 서비스 |
| 응답코드별 TTL 사용 | 응답코드별 TTL 설정값을 그대로 적용합니다. | 응답코드별 TTL을 이미 세밀하게 설정한 경우 |
| TTL 재정의 | no-cache 응답에만 별도의 TTL 값을 직접 지정합니다. | no-cache 응답을 짧게 캐싱해 원본 부하를 줄이고 싶을 때 |
| 응답 즉시 만료 | 캐싱하지 않고 매 요청마다 원본에서 가져옵니다. | 원본의 no-cache 지시를 CDN도 그대로 준수해야 할 때 |
| Option | Behavior | Recommended Use |
|---|---|---|
| Use Default | Follows the CDN default behavior. (TTL: 5 sec) | General services that do not require a separate policy |
| Use TTL by Response Code | Applies the per-response-code TTL settings as configured. | When per-response-code TTL is already configured in detail |
| Override TTL | Directly specify a separate TTL value for no-cache responses only. | When you want to cache no-cache responses briefly to reduce origin load |
| Expire Immediately | Does not cache; fetches from origin on every request. | When the CDN must also honor the origin's no-cache directive exactly |
④ no-store 응답 정책
④ no-store Response Policy
원본 서버가 200번대 성공 상태코드를 Cache-Control: no-store와 함께 응답한 경우의 동작을 정의합니다. no-store는 "이 응답을 어떠한 형태로도 저장해서는 안 된다"는 강력한 지시입니다. 로그인 응답, 결제 정보 등 민감 데이터에 주로 사용됩니다.
Defines the behavior when the origin responds with a 2xx success code along with Cache-Control: no-store. no-store is a strong directive meaning "this response must not be stored in any form." Primarily used for sensitive data such as login responses and payment information.
| 옵션 | 동작 | 권장 상황 |
|---|---|---|
| 기본값 사용 | CDN 기본 동작 방식을 따릅니다. (TTL: 5초) | 별도 정책이 필요 없는 일반 서비스 |
| 응답코드별 TTL 사용 | 응답코드별 TTL 설정값을 그대로 적용합니다. | 응답코드별 TTL이 이미 세밀하게 설정된 경우 |
| TTL 재정의 | no-store 응답에만 별도의 TTL 값을 직접 지정합니다. | no-store 응답을 일부 캐싱하고 싶은 특수한 경우 |
| 캐싱하지 않고 바이패스 | 캐시하지 않고 원본 응답을 클라이언트에 그대로 전달합니다. | 원본의 no-store 지시를 CDN도 완전히 준수해야 할 때 (민감 정보) |
| Option | Behavior | Recommended Use |
|---|---|---|
| Use Default | Follows the CDN default behavior. (TTL: 5 sec) | General services that do not require a separate policy |
| Use TTL by Response Code | Applies the per-response-code TTL settings as configured. | When per-response-code TTL is already configured in detail |
| Override TTL | Directly specify a separate TTL value for no-store responses only. | Special cases where you want to partially cache no-store responses |
| Bypass (no caching) | Passes the origin response directly to the client without caching. | When the CDN must fully honor the origin's no-store directive (sensitive data) |
⑤ 커스텀 TTL
⑤ Custom TTL
URL 패턴별로 TTL을 직접 지정합니다. 원본의 Cache-Control 헤더와 무관하게 CDN에서 강제로 TTL을 적용할 수 있습니다. 규칙은 선언된 순서대로 매칭되므로, 더 구체적인 패턴을 목록 상단에 먼저 선언해야 합니다.
Specify TTL directly per URL pattern. CDN can enforce TTL regardless of the origin's Cache-Control header. Rules are matched in declaration order, so more specific patterns must be declared first.
| 항목 | 설명 | 예시 |
|---|---|---|
| URL 패턴 | TTL을 적용할 URL 경로 패턴. 와일드카드 *를 사용할 수 있습니다. | /samples/*.js, /images/* |
| TTL | 해당 패턴에 적용할 캐시 유지 시간(초). 0을 입력하면 캐싱하지 않습니다. | 1800 (30분), 86400 (1일) |
| Item | Description | Example |
|---|---|---|
| URL Pattern | URL path pattern to apply the TTL to. Wildcard * can be used. | /samples/*.js, /images/* |
| TTL | Cache retention time (in seconds) to apply to the pattern. Entering 0 disables caching. | 1800 (30 min), 86400 (1 day) |
/images/thumb/*.jpg와 /images/*가 모두 있다면, /images/thumb/*.jpg를 반드시 위에 선언해야 합니다.
/images/thumb/*.jpg and /images/* exist, /images/thumb/*.jpg must be declared above the other.
⑥ 갱신 예외 TTL (Stale-While-Revalidate)
⑥ Stale-While-Revalidate TTL
캐시된 콘텐츠의 TTL이 만료됐을 때 원본 서버 장애 등의 이유로 갱신이 불가능한 경우, 만료된 캐시를 계속 서빙할지 여부를 설정합니다. 원본 장애 상황에서 사용자에게 오류 대신 이전 콘텐츠를 제공해 서비스 가용성을 높이는 데 활용됩니다.
Configures whether to continue serving expired cache when it cannot be refreshed (e.g., due to an origin failure) after the cached content's TTL expires. Used to improve service availability by serving previous content instead of an error during origin failures.
| 항목 | 동작 | 권장 여부 |
|---|---|---|
| 갱신불가시 TTL 연장 | 원본 장애 등으로 캐싱된 콘텐츠 갱신이 불가능하면 TTL을 자동 연장해 기존 캐시를 계속 서빙합니다. | 활성화 권장 |
| 5xx TTL 연장 | 캐싱된 콘텐츠 갱신 시점에 원본이 500번대 오류를 응답한 경우 TTL을 자동 연장합니다. | 활성화 권장 |
| 4xx TTL 연장 | 캐싱된 콘텐츠 갱신 시점에 원본이 400번대 오류를 응답한 경우 TTL을 자동 연장합니다. | 선택적 — 4xx는 의도적 오류일 수 있으므로 신중히 설정 |
| Item | Behavior | Recommended |
|---|---|---|
| Extend TTL When Refresh Unavailable | If cached content cannot be refreshed due to origin failure, automatically extends TTL and continues serving the existing cache. | Enable recommended |
| 5xx TTL Extension | Automatically extends TTL when the origin returns a 5xx error at the point of cache refresh. | Enable recommended |
| 4xx TTL Extension | Automatically extends TTL when the origin returns a 4xx error at the point of cache refresh. | Optional — 4xx may be an intentional error; configure carefully |
⑦ 캐시키 구성 (Cache Key)
⑦ Cache Key Configuration
캐시키(Cache Key)는 CDN이 동일한 요청인지 구별하는 기준입니다. 캐시키를 구성하는 요소가 많을수록 더 다양하게 캐시가 분리되어 히트율이 낮아질 수 있습니다. 반대로 요소를 줄이면 히트율은 높아지지만 잘못된 콘텐츠가 제공될 위험이 있습니다.
The Cache Key is the criterion the CDN uses to identify identical requests. More components in the cache key means more cache variations and potentially lower hit ratios. Fewer components improve hit ratios but risk serving incorrect content.
| 항목 | 활성화 시 동작 | 비활성화 시 동작 | 권장값 |
|---|---|---|---|
| 대소문자 구분 | 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율 저하 주의) |
| Item | Behavior When Enabled | Behavior When Disabled | Recommended Value |
|---|---|---|---|
| Case Sensitivity | Distinguishes uppercase/lowercase in URLs and stores as separate caches/Image.jpg and /image.jpg = separate caches | Normalizes all to lowercase and treats as the same cache | Enable recommended (when origin is case-sensitive) |
| Distinguish Accept-Encoding Header | Stores as separate caches based on the client's compression support (gzip, br, etc.) | Ignores Accept-Encoding header and operates in plain mode | Enable recommended (when caching compressed responses) |
| Distinguish QueryString | Includes the URL query string (?key=value) in the cache key/api?v=1 and /api?v=2 = separate caches | Ignores query string and treats as the same resource | Enable recommended (when version or filter parameters are present) |
| Vary Header Support | Recognizes origin's Vary header values and stores separate caches per header valueCache conditions increase greatly, potentially reducing HIT ratio | Ignores the Vary header | Disable recommended (caution: HIT ratio drops) |
이 옵션이 활성화되면 캐싱조건이 많아져 HIT율이 크게 저하되기 때문에 주의한다.
When this option is enabled, caching conditions increase greatly, causing a significant drop in HIT ratio. Use with caution.
⑧ POST 캐싱
⑧ POST Caching
일반적으로 HTTP POST 요청은 상태를 변경하는 요청으로 간주되어 캐싱하지 않습니다. 이 기능을 활성화하면 POST 요청과 응답을 캐싱할 수 있습니다. 단, 최대 4KB까지의 POST Body만 캐싱 가능하며, 이를 초과하는 요청은 자동으로 바이패스(원본 직접 전달)됩니다.
HTTP POST requests are generally treated as state-changing and not cached. Enabling this feature allows POST requests and responses to be cached. However, only POST Bodies up to 4KB can be cached; requests exceeding this are automatically bypassed (forwarded directly to origin).
최대 4KB까지의 POST Body를 캐싱할 수 있습니다. 초과되는 POST 요청은 바이패스됩니다.
POST Bodies up to 4KB can be cached. POST requests exceeding this limit are bypassed.
⑨ 바이패스 (Bypass)
⑨ Bypass
특정 URL 패턴에 해당하는 요청을 CDN이 캐시하지 않고 원본 서버로 직접 전달합니다. 로그인·결제·실시간 데이터 등 캐싱이 부적합한 경로를 명시적으로 지정할 수 있습니다. 규칙은 선언된 순서대로 매칭되므로, 더 구체적인 패턴을 먼저 선언해야 합니다.
Forwards requests matching specific URL patterns directly to the origin server without CDN caching. Explicitly specify paths unsuitable for caching such as login, payment, or real-time data. Rules are matched in declaration order, so more specific patterns must be declared first.
| 항목 | 설명 | 예시 |
|---|---|---|
| URL 패턴 | 바이패스를 적용할 URL 경로 패턴. 명확한 경로 또는 와일드카드 패턴을 사용합니다. | /source/public.zip, /assets/*.js |
| 액션 | 현재는 bypass 단일 액션만 지원합니다. 해당 URL의 모든 요청을 원본으로 직접 전달합니다. | bypass |
| Item | Description | Example |
|---|---|---|
| URL Pattern | URL path pattern to apply the bypass to. Use an explicit path or a wildcard pattern. | /source/public.zip, /assets/*.js |
| Action | Currently only the bypass action is supported. Forwards all requests for that URL directly to the origin. | bypass |
선언된 순서를 따릅니다. 항상 명확한 패턴이 우선하도록 구성하세요.
Rules are applied in declaration order. Always configure more specific patterns to take priority.
콘텐츠 처리
조건부 요청(304 Not Modified), If-Modified-Since 비교 정책, If-Range 헤더 처리, GZip/Brotli 압축을 설정합니다. 각 항목은 불필요한 데이터 전송을 줄여 대역폭 비용을 절감하고 응답 속도를 높이는 데 기여합니다.
Configure conditional requests (304 Not Modified), If-Modified-Since comparison policy, If-Range header handling, and GZip/Brotli compression. Each setting helps reduce unnecessary data transfer, lower bandwidth costs, and improve response speed.
브라우저가 이미 캐싱한 리소스를 재요청할 때, CDN이 콘텐츠 변경 여부만 확인하고 변경이 없으면 헤더만 담긴 304 응답을 반환합니다. 전체 파일을 재전송하지 않아 대역폭과 응답 시간이 크게 절감됩니다.
When a browser re-requests a cached resource, the CDN checks only for content changes and returns a header-only 304 response if unchanged. Avoids re-sending the full file, significantly reducing bandwidth and response time.
브라우저가 캐싱한 리소스의 마지막 수정 시각을 헤더로 전달합니다. CDN이 캐싱된 Last-Modified 값과 비교해 변경 여부를 판단합니다.
Sends the last modified time of the browser's cached resource as a header. The CDN compares it against the cached Last-Modified value to determine whether the content has changed.
브라우저가 캐싱한 리소스의 ETag(콘텐츠 해시)를 헤더로 전달합니다. CDN이 현재 캐싱된 ETag와 비교해 변경 여부를 판단합니다. 시각 비교보다 정밀합니다.
Sends the ETag (content hash) of the browser's cached resource as a header. The CDN compares it against the currently cached ETag. More precise than time-based comparison.
비디오 탐색(seek) 등에서 파일의 특정 바이트 구간만 요청하는 방식. If-Range는 캐싱된 버전이 유효한지 먼저 확인하고, 유효하면 206 Partial Content로 응답합니다.
A method of requesting only a specific byte range of a file, used in video seeking. If-Range first checks whether the cached version is still valid, and if so, responds with 206 Partial Content.
HTML, CSS, JS, JSON 등 텍스트 콘텐츠를 압축 전송합니다. 이미지·비디오는 이미 압축된 포맷이므로 적용하지 않습니다. Brotli는 GZip 대비 20~26% 추가 압축률을 제공합니다.
Compresses text content such as HTML, CSS, JS, and JSON for delivery. Images and video are already compressed formats and should not be re-compressed. Brotli provides 20–26% additional compression over GZip.
① 클라이언트 304 정책 (조건부 요청)
① Client 304 Policy (Conditional Request)
브라우저가 보낸 조건부 헤더(If-Modified-Since, If-None-Match)를 CDN이 어떤 기준으로 평가해 304를 반환할지 결정합니다. 두 헤더를 함께 사용하는 경우 어느 하나라도 일치하면 304로 판단할지, 특정 헤더만 사용할지를 선택합니다.
Determines how the CDN evaluates conditional headers (If-Modified-Since, If-None-Match) sent by the browser to decide when to return 304. When both headers are used, choose whether a match on either one triggers 304, or only a specific header is used.
| 옵션 | 동작 | 권장 상황 |
|---|---|---|
| 일부 일치 권장 | If-Modified-Since 또는 If-None-Match 중 하나라도 일치하면 304로 판단합니다. 두 헤더를 모두 활용해 최대한 304를 반환합니다. |
대부분의 서비스 — 대역폭 절감 효과 최대화 |
| If-Modified-Since만 | If-Modified-Since 헤더만으로 판단합니다. ETag를 무시합니다. |
원본 서버가 ETag를 생성하지 않는 경우 |
| If-None-Match만 | If-None-Match(ETag) 헤더만으로 판단합니다. 수정 시각을 무시합니다. |
콘텐츠 해시 기반으로만 변경을 감지하고 싶은 경우 |
| Option | Behavior | Recommended Use |
|---|---|---|
| Partial Match Recommended | Returns 304 if either If-Modified-Since or If-None-Match matches. Uses both headers to maximize 304 responses. |
Most services — maximize bandwidth savings |
| If-Modified-Since Only | Evaluates using only the If-Modified-Since header. Ignores ETag. |
When the origin server does not generate ETags |
| If-None-Match Only | Evaluates using only the If-None-Match (ETag) header. Ignores modification time. |
When change detection based solely on content hash is desired |
② If-Modified-Since 조건판단
② If-Modified-Since Condition Evaluation
브라우저가 보낸 If-Modified-Since 값과 CDN이 캐싱한 Last-Modified 값을 어떻게 비교할지 정의합니다. HTTP 표준에서는 "같거나 큰 경우"(이상)를 변경 없음으로 판단하지만, 엄격하게 "정확히 일치하는 경우"만 304로 판단하는 옵션도 제공합니다.
Defines how to compare the browser's If-Modified-Since value against the CDN's cached Last-Modified value. The HTTP standard treats "equal or greater" as unchanged, but a stricter option is also available that returns 304 only on an exact match.
| 옵션 | 304 반환 조건 | 권장 상황 |
|---|---|---|
| 같거나, 큰 경우 권장 | 클라이언트 값 ≥ 캐싱된 Last-Modified 값이면 304 반환. HTTP 표준 동작 방식. |
대부분의 서비스 — 표준 준수 및 대역폭 절감 |
| 일치할 경우 | 클라이언트 값 = 캐싱된 Last-Modified 값이 정확히 동일한 경우에만 304 반환. |
콘텐츠 수정 시각이 자주 바뀌는 서비스에서 엄격하게 재검증을 강제할 때 |
| Option | 304 Return Condition | Recommended Use |
|---|---|---|
| Equal or Greater Recommended | Returns 304 if client value ≥ cached Last-Modified value. Standard HTTP behavior. | Most services — standards compliance and bandwidth savings |
| Exact Match Only | Returns 304 only when client value exactly equals the cached Last-Modified value. | Services where content modification time changes frequently and strict revalidation is required |
③ If-Range 헤더 처리
③ If-Range Header Handling
If-Range 헤더는 브라우저가 범위 요청(Range Request)을 보내기 전에 "내가 캐싱한 버전과 CDN이 가진 버전이 동일한가?"를 먼저 확인하는 전제 조건 헤더입니다.
The If-Range header is a precondition header that the browser uses before sending a Range Request to first verify: "Is the version I cached the same as what the CDN has?"
| 상황 | If-Range 활성화 시 동작 | If-Range 비활성화 시 동작 |
|---|---|---|
| 캐싱된 버전이 유효한 경우 | 206 Partial Content — 요청한 바이트 구간만 전송 | If-Range 헤더를 무시하고 항상 200 전체 응답 또는 Range만 처리 |
| 캐싱된 버전이 변경된 경우 | 200 OK — 전체 파일을 새로 전송 |
| Situation | Behavior with If-Range Enabled | Behavior with If-Range Disabled |
|---|---|---|
| Cached version is valid | 206 Partial Content — only the requested byte range is transmitted | Ignores the If-Range header and always responds with 200 full response or processes Range only |
| Cached version has changed | 200 OK — the entire file is re-transmitted |
④ GZip / Brotli 압축
④ GZip / Brotli Compression
텍스트 기반 콘텐츠(HTML, CSS, JS, JSON, XML 등)를 CDN이 압축해 전송합니다. 브라우저가 압축을 지원하면 Accept-Encoding 헤더로 알려주고, CDN은 그에 맞는 압축 포맷으로 응답합니다. 원본이 이미 압축된 콘텐츠를 반환한다면 CDN은 재압축하지 않고 압축 상태를 유지합니다.
The CDN compresses text-based content (HTML, CSS, JS, JSON, XML, etc.) before delivery. Browsers signal compression support via the Accept-Encoding header, and the CDN responds with the matching compression format. If the origin already returns compressed content, the CDN preserves the compression state without re-compressing.
| 압축 방식 | 압축률 | 브라우저 지원 | 권장 상황 |
|---|---|---|---|
| GZip | 일반적으로 60~80% 크기 감소 | 모든 현대 브라우저 지원 (IE6+) | 호환성이 중요한 서비스 |
| Brotli | GZip 대비 20~26% 추가 압축 | Chrome 50+, Firefox 44+, Safari 11+, Edge 15+ | 최신 브라우저 대상 서비스, 성능 최적화 우선 |
| Compression Method | Compression Ratio | Browser Support | Recommended Use |
|---|---|---|---|
| GZip | Typically 60–80% size reduction | All modern browsers (IE6+) | Services where compatibility is critical |
| Brotli | 20–26% additional compression over GZip | Chrome 50+, Firefox 44+, Safari 11+, Edge 15+ | Services targeting modern browsers, performance optimization priority |
/sample/api) 또는 와일드카드를 포함하는 패턴(/asset/*.js)으로 구성할 수 있습니다./sample/api) or wildcard patterns (/asset/*.js).압축 적용 권장 대상
Recommended Compression Targets
| 콘텐츠 유형 | 압축 적용 | 이유 |
|---|---|---|
| HTML, CSS, JS, JSON, XML, SVG, 폰트(woff) | 적용 권장 | 텍스트 기반으로 압축률이 높음 (60~80% 크기 감소) |
| JPEG, PNG, WebP, AVIF, GIF | 적용 불필요 | 이미 손실/무손실 압축된 바이너리 포맷 — 재압축 시 오히려 크기 증가 가능 |
| MP4, WebM, MP3, AAC | 적용 불필요 | 미디어 코덱이 자체적으로 압축 — 추가 압축 효과 없음 |
| ZIP, gz, br 등 압축 아카이브 | 적용 불필요 | 이미 압축된 파일 — 재압축 시 크기 증가 또는 처리 부하만 발생 |
| Content Type | Apply Compression | Reason |
|---|---|---|
| HTML, CSS, JS, JSON, XML, SVG, Font (woff) | Recommended | Text-based with high compression ratio (60–80% size reduction) |
| JPEG, PNG, WebP, AVIF, GIF | Not Needed | Already lossy/lossless compressed binary format — re-compressing may increase size |
| MP4, WebM, MP3, AAC | Not Needed | Media codecs compress internally — no additional compression benefit |
| ZIP, gz, br and other compressed archives | Not Needed | Already compressed — re-compressing only increases size or processing load |
/*처럼 모든 URL에 압축을 적용하면 이미 압축된 이미지·비디오 파일에도 GZip/Brotli 처리를 시도합니다. 압축 효과는 없고 CDN 처리 부하만 증가합니다. 반드시 /*.js, /*.css, /*.html 등 텍스트 파일 패턴만 등록하세요.
Applying compression to all URLs like /* will attempt GZip/Brotli processing on already-compressed image and video files. There is no compression benefit and CDN processing load only increases. Register only text file patterns such as /*.js, /*.css, /*.html.
접근 제어
HTTP→HTTPS 강제 리다이렉트, URL·IP·헤더 기반 접근 제어 규칙, OPTIONS 메서드 응답, HTTP 메서드 허용 범위를 설정합니다. CDN 엣지에서 요청을 선별적으로 허용·차단해 원본 서버 부하를 줄이고 보안을 강화합니다.
Configure forced HTTP→HTTPS redirect, URL/IP/header-based access control rules, OPTIONS method response, and HTTP method allowlist. Selectively allow or block requests at the CDN edge to reduce origin server load and strengthen security.
HTTP로 들어오는 모든 요청을 301(영구 리다이렉트)로 HTTPS로 전환합니다. 평문 통신을 차단해 도청·중간자 공격을 방지합니다.
Redirects all incoming HTTP requests to HTTPS with a 301 (permanent redirect). Blocks plaintext communication to prevent eavesdropping and man-in-the-middle attacks.
URL 패턴, 클라이언트 IP, 헤더(Referer, User-Agent) 세 가지 조건을 조합해 요청을 허용(Allow) 또는 거부(Deny)합니다. 규칙은 선언 순서대로 평가됩니다.
Combine three conditions — URL pattern, client IP, and headers (Referer, User-Agent) — to Allow or Deny requests. Rules are evaluated in declaration order.
브라우저는 Cross-Origin 요청 전 OPTIONS 메서드로 사전 확인(Preflight)을 보냅니다. CDN이 200으로 응답하도록 설정해야 CORS 요청이 정상 처리됩니다.
Before Cross-Origin requests, browsers send a Preflight check using the OPTIONS method. The CDN must be configured to respond with 200 for CORS requests to work correctly.
CDN에서 허용할 HTTP 메서드를 명시적으로 지정합니다. 정적 콘텐츠 CDN이라면 GET/HEAD만 허용하고 나머지는 원본으로 바이패스하거나 차단합니다.
Explicitly specify the HTTP methods allowed by the CDN. For static content CDNs, allow only GET/HEAD and bypass or block the rest to the origin.
① HTTP to HTTPS 리다이렉트
① HTTP to HTTPS Redirect
HTTP(포트 80)로 들어오는 모든 요청을 CDN 엣지에서 HTTPS(포트 443)로 301 영구 리다이렉트합니다. 클라이언트가 암호화되지 않은 평문으로 접속하는 것을 원천 차단하며, 브라우저는 이후 해당 도메인에 자동으로 HTTPS로 접속합니다.
All requests arriving on HTTP (port 80) are permanently redirected (301) to HTTPS (port 443) at the CDN edge. Blocks all plaintext connections from clients; browsers will automatically connect via HTTPS for that domain thereafter.
Strict-Transport-Security 헤더를 추가하면 브라우저가 이후 요청부터 자동으로 HTTPS만 사용해 첫 요청의 평문 노출도 차단할 수 있습니다.
HTTP→HTTPS redirect only applies to the first request. Adding the Strict-Transport-Security header in the Client Header Control tab causes browsers to automatically use HTTPS from subsequent requests, blocking even the first request's plaintext exposure.
② 접근제어 규칙
② Access Control Rules
URL 패턴, 클라이언트 IP, 요청 헤더(Referer, User-Agent 등) 세 가지 조건을 조합해 특정 요청을 허용(Allow) 또는 거부(Deny)합니다. 규칙은 선언된 순서대로(위→아래) 평가되며, 첫 번째로 일치하는 규칙이 적용됩니다. 더 구체적인 조건을 먼저 선언해야 합니다.
Combine three conditions — URL pattern, client IP, and request headers (Referer, User-Agent, etc.) — to Allow or Deny specific requests. Rules are evaluated top-to-bottom in declaration order; the first matching rule is applied. More specific conditions must be declared first.
| 조건 항목 | 설명 | 입력 예시 |
|---|---|---|
| URL 패턴 | 접근을 제어할 요청 경로 패턴. 와일드카드 * 사용 가능. 비워두면 전체 URL에 적용됩니다. |
/m2livecloud/healthcheck/admin/*/*.env |
| IP 패턴 | 허용·차단할 클라이언트 IP 또는 IP 대역. CIDR 표기 또는 범위 표기를 지원합니다. | 192.168.1.1192.168.1.1-25510.0.0.0/8 |
| 헤더 패턴 | 요청 헤더 값으로 조건을 설정합니다. Referer(Hotlinking 방지), User-Agent(봇 차단) 등에 활용합니다. |
refereruser-agent |
| 동작 (Action) | 조건 일치 시 수행할 동작. 거부(Deny)는 응답코드와 함께 접근을 차단하고, 허용(Allow)은 명시적으로 통과시킵니다. | 거부(Deny) / 허용(Allow) |
| 응답코드 | 거부(Deny) 시 클라이언트에 반환할 HTTP 상태코드. 기본값은 403입니다. | 403 Forbidden404 Not Found200 OK |
| 대소문자 구분 | 헤더 값 매칭 시 대소문자를 구분할지 여부. URL·IP는 항상 대소문자 무관하게 처리됩니다. | 체크박스 활성화 시 구분 |
| Condition Item | Description | Input Example |
|---|---|---|
| URL Pattern | Request path pattern to control access. Wildcard * supported. Leave empty to apply to all URLs. |
/m2livecloud/healthcheck/admin/*/*.env |
| IP Pattern | Client IP or IP range to allow or block. Supports CIDR notation or range notation. | 192.168.1.1192.168.1.1-25510.0.0.0/8 |
| Header Pattern | Set conditions based on request header values. Used for Referer (hotlinking prevention), User-Agent (bot blocking), etc. |
refereruser-agent |
| Action | Action to take when condition matches. Deny blocks access with a response code; Allow explicitly passes the request through. | Deny / Allow |
| Response Code | HTTP status code returned to the client on Deny. Default is 403. | 403 Forbidden404 Not Found200 OK |
| Case Sensitive | Whether to apply case-sensitive matching for header values. URL and IP are always case-insensitive. | Enable checkbox to distinguish case |
접근제어 활용 시나리오
Access Control Usage Scenarios
| 목적 | URL 패턴 | IP 패턴 | 헤더 패턴 | 동작 | 응답코드 |
|---|---|---|---|---|---|
| 관리자 페이지 IP 허용 | /admin/* | 203.0.113.0/24 | — | 허용 | — |
| 관리자 페이지 외부 차단 | /admin/* | — | — | 거부 | 403 |
| Hotlinking(이미지 직링크) 방지 | /images/* | — | referer (외부 도메인) | 거부 | 403 |
| 특정 봇 User-Agent 차단 | — | — | user-agent (악성 봇 식별값) | 거부 | 403 |
| 민감 파일 외부 노출 차단 | /*.env, /*.git | — | — | 거부 | 404 |
| 헬스체크 엔드포인트 허용 | /healthcheck | — | — | 허용 | — |
| Purpose | URL Pattern | IP Pattern | Header Pattern | Action | Response Code |
|---|---|---|---|---|---|
| Allow admin page by IP | /admin/* | 203.0.113.0/24 | — | Allow | — |
| Block admin page externally | /admin/* | — | — | Deny | 403 |
| Prevent hotlinking (image direct links) | /images/* | — | referer (external domain) | Deny | 403 |
| Block specific bot User-Agent | — | — | user-agent (malicious bot identifier) | Deny | 403 |
| Block sensitive file external exposure | /*.env, /*.git | — | — | Deny | 404 |
| Allow health check endpoint | /healthcheck | — | — | Allow | — |
③ OPTIONS 메서드 응답
③ OPTIONS Method Response
브라우저는 다른 도메인(Cross-Origin)에 fetch, XMLHttpRequest 등으로 요청하기 전에 CORS Preflight 요청을 OPTIONS 메서드로 먼저 보냅니다. CDN이 OPTIONS 요청에 어떻게 응답할지 결정합니다.
Before sending cross-domain requests via fetch, XMLHttpRequest, etc., browsers first send a CORS Preflight request using the OPTIONS method. This setting determines how the CDN responds to OPTIONS requests.
| 옵션 | 동작 | 권장 상황 |
|---|---|---|
| 405 Method Not Allowed | OPTIONS 요청을 지원하지 않는다고 응답합니다. CORS Preflight가 실패해 브라우저의 Cross-Origin 요청이 차단됩니다. | Cross-Origin 요청이 전혀 없는 서비스 |
| 200 OK 권장 | OPTIONS 요청에 200으로 응답합니다. 브라우저가 Preflight를 통과해 실제 요청을 진행할 수 있습니다. 클라이언트 헤더 제어 탭에서 CORS 헤더도 함께 설정해야 합니다. | 웹폰트, API fetch, Canvas 등 Cross-Origin 요청이 있는 서비스 |
| Option | Behavior | Recommended Use |
|---|---|---|
| 405 Method Not Allowed | Responds that OPTIONS requests are not supported. CORS Preflight fails and the browser's Cross-Origin requests are blocked. | Services with no Cross-Origin requests at all |
| 200 OK Recommended | Responds to OPTIONS requests with 200. The browser passes Preflight and can proceed with the actual request. CORS headers must also be configured in the Client Header Control tab. | Services with Cross-Origin requests such as web fonts, API fetch, Canvas, etc. |
has been blocked by CORS policy 오류가 발생할 때 순서대로 확인하세요.
- 접근 제어 → OPTIONS 메서드가 200 OK로 설정되어 있는지 확인
- 클라이언트 헤더 제어 → CORS 헤더 지원이 활성화되어 있는지 확인
- 원본 서버가
Access-Control-Allow-Origin헤더를 반환하는지 확인
has been blocked by CORS policy error appears in the browser console, check in order:
- Access Control → Verify OPTIONS method is set to 200 OK
- Client Header Control → Verify CORS Header Support is enabled
- Verify the origin server returns the
Access-Control-Allow-Originheader
④ HTTP 메서드 제한
④ HTTP Method Restriction
CDN이 처리하거나 원본으로 전달할 HTTP 메서드를 명시적으로 지정합니다. CDN은 기본적으로 HEAD, GET, POST를 처리하며, 이 외에 선언된 메서드만 원본으로 바이패스됩니다. 이 설정은 OPTIONS 메서드 응답 설정보다 우선합니다.
Explicitly specify the HTTP methods the CDN will handle or forward to the origin. The CDN handles HEAD, GET, and POST by default; only declared methods beyond these are bypassed to the origin. This setting takes priority over the OPTIONS method response setting.
| 메서드 | 용도 | CDN 기본 처리 | 권장 설정 |
|---|---|---|---|
GET | 리소스 조회 — 캐싱 대상 | CDN 처리 (캐시) | 항상 허용 |
HEAD | 헤더만 조회 — 캐시 유효성 확인 | CDN 처리 | 항상 허용 |
POST | 데이터 전송 — 상태 변경 요청 | CDN 처리 (POST 캐싱 설정에 따름) | API 서비스에만 허용 |
PUT | 리소스 전체 교체 | 선언 시 원본 바이패스 | REST API 서비스에만 허용 |
DELETE | 리소스 삭제 | 선언 시 원본 바이패스 | REST API 서비스에만 허용 |
PATCH | 리소스 부분 수정 | 선언 시 원본 바이패스 | REST API 서비스에만 허용 |
OPTIONS | CORS Preflight 확인 | OPTIONS 메서드 설정에 따름 | CORS 사용 시 허용 |
TRACE | 요청 루프백 디버깅 | 선언 시 원본 바이패스 | 비허용 권장 (XST 공격 위험) |
| Method | Purpose | CDN Default Handling | Recommended Setting |
|---|---|---|---|
GET | Resource retrieval — cacheable | CDN handles (cache) | Always allow |
HEAD | Headers only — cache validity check | CDN handles | Always allow |
POST | Data transmission — state-changing request | CDN handles (per POST caching setting) | Allow only for API services |
PUT | Full resource replacement | Bypassed to origin when declared | Allow only for REST API services |
DELETE | Resource deletion | Bypassed to origin when declared | Allow only for REST API services |
PATCH | Partial resource modification | Bypassed to origin when declared | Allow only for REST API services |
OPTIONS | CORS Preflight check | Per OPTIONS method setting | Allow when using CORS |
TRACE | Request loopback debugging | Bypassed to origin when declared | Not recommended (XST attack risk) |
CDN 서버에서 처리할 수 있는 메서드(HEAD, GET, POST)를 제외한, 선언된 모든 메서드는 원본으로 바이패스된다. 이 설정은 OPTIONS 메서드 응답설정보다 우선한다.
All declared methods other than those handled natively by the CDN (HEAD, GET, POST) are bypassed to the origin. This setting takes priority over the OPTIONS method response setting.
| 서비스 유형 | 권장 허용 메서드 |
|---|---|
| 정적 콘텐츠 CDN (이미지, CSS, JS) | GET, HEAD |
| 웹사이트 + CORS 지원 | GET, HEAD, OPTIONS |
| REST API CDN | GET, HEAD, POST, PUT, DELETE, PATCH, OPTIONS |
클라이언트 헤더 제어
CDN이 클라이언트(브라우저)에게 전송하는 응답 헤더를 제어합니다. CORS 지원, 세션 재사용, Keep-Alive, Via, ETag, Server, Age 헤더 설정과 클라이언트 요청/응답 헤더 변조까지 클라이언트 방향의 모든 헤더 정책을 이 탭에서 관리합니다.
Control the response headers the CDN sends to clients (browsers). Manage all client-side header policies in this tab: CORS support, session reuse, Keep-Alive, Via, ETag, Server, Age header settings, and client request/response header manipulation.
| 항목 | 헤더 | 역할 요약 | 기본 권장값 |
|---|---|---|---|
| CORS 헤더 | Access-Control-Allow-Origin | 다른 도메인의 JS에서 CDN 리소스 접근 허용 | 활성화 (Cross-Origin 사용 시) |
| Connection 헤더 | Connection: keep-alive | 클라이언트와 CDN 간 TCP 연결 재사용 | 활성화 권장 |
| Keep-Alive 헤더 | Keep-Alive | 연결 유지 파라미터(최대 요청 횟수 등) 전달 | 활성화 권장 |
| Via 헤더 | Via | CDN 경유 여부 표시 — 디버깅용 | 운영 환경 비활성화 권장 |
| ETag 헤더 | ETag | 콘텐츠 해시로 브라우저 캐시 유효성 검증 → 304 절감 | 활성화 권장 |
| Server 헤더 | Server | 원본 서버 정보를 클라이언트에 전달 | 보안상 비활성화 권장 |
| Age 헤더 | Age | CDN 캐시에 저장된 후 경과한 시간(초) 표시 | 활성화 권장 (캐시 디버깅) |
| 요청헤더 변조 | 커스텀 | 클라이언트 → CDN 요청 헤더 추가·수정·삭제 | 필요 시 설정 |
| 응답헤더 변조 | 커스텀 | CDN → 클라이언트 응답 헤더 추가·수정·삭제 | 필요 시 설정 |
| Item | Header | Role Summary | Default Recommended Value |
|---|---|---|---|
| CORS Header | Access-Control-Allow-Origin | Allow CDN resource access from JS on other domains | Enable (when using Cross-Origin) |
| Connection Header | Connection: keep-alive | Reuse TCP connections between client and CDN | Enable recommended |
| Keep-Alive Header | Keep-Alive | Transmit connection-keep parameters (max request count, etc.) | Enable recommended |
| Via Header | Via | Indicates CDN routing — for debugging | Disable recommended in production |
| ETag Header | ETag | Validate browser cache via content hash → reduces 304 overhead | Enable recommended |
| Server Header | Server | Passes origin server information to the client | Disable recommended for security |
| Age Header | Age | Shows elapsed time (sec) since stored in CDN cache | Enable recommended (cache debugging) |
| Request Header Manipulation | Custom | Add, modify, or delete client → CDN request headers | Configure as needed |
| Response Header Manipulation | Custom | Add, modify, or delete CDN → client response headers | Configure as needed |
① CORS 헤더 지원
① CORS Header Support
CORS(Cross-Origin Resource Sharing)는 브라우저가 다른 도메인의 리소스를 JS에서 접근할 수 있도록 허용하는 표준 메커니즘입니다. CDN이 응답에 Access-Control-Allow-Origin 헤더를 추가해 브라우저의 Cross-Origin 요청을 허용합니다. 웹폰트 로드, fetch() API 호출, Canvas 이미지 처리 등에서 필수입니다.
CORS (Cross-Origin Resource Sharing) is the standard mechanism that allows browsers to access resources from other domains via JS. The CDN adds the Access-Control-Allow-Origin header to responses to allow browser Cross-Origin requests. Required for loading web fonts, fetch() API calls, Canvas image processing, etc.
| 옵션 | 동작 | 권장 상황 |
|---|---|---|
| *, 모든 도메인 | Access-Control-Allow-Origin: *를 응답에 추가합니다. 모든 도메인에서의 Cross-Origin 요청을 허용합니다. |
공개 CDN, 공개 API, 누구나 사용 가능한 리소스 |
| 선언된 도메인 | 허용할 Origin 도메인을 직접 지정합니다. 요청의 Origin 헤더와 비교해 일치하는 경우에만 허용합니다. |
특정 도메인만 허용해야 하는 내부 서비스, 인증이 필요한 API |
| Option | Behavior | Recommended Use |
|---|---|---|
| *, All Domains | Adds Access-Control-Allow-Origin: * to the response. Allows Cross-Origin requests from all domains. |
Public CDN, public API, resources accessible by anyone |
| Declared Domains | Directly specify allowed Origin domains. Only allows requests when the Origin header matches a declared domain. |
Internal services that must allow only specific domains, APIs requiring authentication |
fetch(url, { credentials: 'include' })처럼 쿠키나 Authorization 헤더를 포함하는 Cross-Origin 요청은 브라우저 보안 정책상 Access-Control-Allow-Origin: *로는 동작하지 않습니다. 이 경우 선언된 도메인 옵션으로 구체적인 Origin을 지정하고, Access-Control-Allow-Credentials: true 헤더를 응답헤더 변조로 추가하세요.
Cross-Origin requests that include cookies or Authorization headers (like fetch(url, { credentials: 'include' })) will not work with Access-Control-Allow-Origin: * due to browser security policy. In this case, use the Declared Domains option to specify a concrete Origin and add Access-Control-Allow-Credentials: true via response header manipulation.
② Connection 헤더 (세션 재사용)
② Connection Header (Session Reuse)
CDN이 클라이언트에게 응답할 때 Connection 헤더를 포함해 TCP 연결의 재사용 여부를 알립니다. 활성화하면 Connection: keep-alive를 응답에 추가해 클라이언트가 동일 TCP 연결로 여러 요청을 연속 전송할 수 있도록 합니다. 비활성화하면 Connection: close로 응답해 요청마다 새 TCP 연결이 맺어집니다.
When the CDN responds to a client, it includes the Connection header to signal whether the TCP connection should be reused. When enabled, adds Connection: keep-alive to allow the client to send multiple requests over the same TCP connection. When disabled, responds with Connection: close, creating a new TCP connection per request.
③ Keep-Alive 헤더
③ Keep-Alive Header
Keep-Alive 헤더는 TCP 연결 유지에 대한 상세 파라미터를 클라이언트에 전달합니다. 최대 요청 횟수(max)를 설정하면 해당 연결에서 처리 가능한 최대 요청 수를 지정하며, 이후 트랜잭션마다 1씩 차감되어 0이 되면 연결을 종료합니다.
The Keep-Alive header delivers detailed parameters for TCP connection maintenance to the client. Setting the maximum request count (max) specifies the maximum number of requests that can be handled on that connection; it decrements by 1 per transaction and the connection closes when it reaches 0.
Connection: keep-alive는 "연결을 유지하겠다"는 의사 표현이고, Keep-Alive: max=1000은 "최대 1,000번 요청까지 유지하겠다"는 구체적인 조건입니다. HTTP/2·HTTP/3 환경에서는 멀티플렉싱으로 연결 재사용이 기본이므로 이 헤더의 영향이 줄어듭니다.
Connection: keep-alive expresses "I intend to keep the connection alive," while Keep-Alive: max=1000 is the specific condition "keep it alive for up to 1,000 requests." In HTTP/2 and HTTP/3 environments, connection reuse is the default via multiplexing, so the impact of these headers is reduced.
④ Via 헤더
④ Via Header
Via 헤더는 HTTP 요청/응답이 어떤 프록시(CDN 포함)를 경유했는지 기록하는 표준 헤더입니다. CDN 경유 여부와 버전 정보를 확인할 수 있어 디버깅에 유용하지만, 운영 환경에서는 인프라 구성 정보가 외부에 노출될 수 있으므로 비활성화를 권장합니다.
The Via header is a standard header that records which proxies (including CDN) an HTTP request/response passed through. Useful for debugging by revealing CDN routing and version info, but disabling is recommended in production environments as it can expose infrastructure configuration to external parties.
⑤ ETag 헤더
⑤ ETag Header
ETag(Entity Tag)는 콘텐츠의 특정 버전을 나타내는 식별자(해시 값)입니다. CDN이 응답에 ETag를 포함하면 브라우저가 다음 요청 시 If-None-Match 헤더로 전달해, 콘텐츠가 변경되지 않았다면 CDN은 본문 없이 304 Not Modified만 반환합니다. 대역폭을 절감하고 페이지 로드 속도를 향상시킵니다.
ETag (Entity Tag) is an identifier (hash value) representing a specific version of content. When the CDN includes an ETag in a response, the browser sends it as an If-None-Match header on the next request; if unchanged, the CDN returns only 304 Not Modified with no body. Reduces bandwidth and improves page load speed.
⑥ Server 헤더
⑥ Server Header
Server 헤더는 원본 서버의 소프트웨어 정보(예: Apache/2.4.51, nginx/1.21.0)를 클라이언트에 전달합니다. 원본 서버가 이 헤더를 응답에 포함하는 경우 CDN이 이를 클라이언트에 그대로 전달할지 결정합니다. 서버 버전 정보는 공격자가 취약점을 식별하는 데 활용될 수 있으므로 운영 환경에서는 비활성화를 권장합니다.
The Server header passes origin server software information (e.g. Apache/2.4.51, nginx/1.21.0) to the client. This setting determines whether the CDN forwards this header to clients when the origin includes it. Server version information can help attackers identify vulnerabilities, so disabling it in production is recommended.
Server: Apache/2.4.51 (Ubuntu)처럼 구체적인 버전 정보가 노출되면 공격자가 해당 버전의 알려진 취약점(CVE)을 식별해 공격에 활용할 수 있습니다. 원본 서버 설정에서도 Server 헤더를 제거하거나 일반화하는 것을 함께 권장합니다.
Exposing specific version info like Server: Apache/2.4.51 (Ubuntu) allows attackers to identify known vulnerabilities (CVEs) for that version and exploit them. It is also recommended to remove or generalize the Server header in the origin server configuration.
⑦ Age 헤더
⑦ Age Header
Age 헤더는 해당 콘텐츠가 CDN 캐시에 저장된 후 경과한 시간(초)을 나타냅니다. 예를 들어 Age: 300은 이 응답이 CDN에 5분 동안 캐싱되어 있었음을 의미합니다. 클라이언트와 개발자가 캐시 상태를 직접 확인할 수 있어 디버깅에 유용합니다.
The Age header indicates how many seconds have elapsed since the content was stored in the CDN cache. For example, Age: 300 means this response has been cached in the CDN for 5 minutes. Useful for debugging as clients and developers can directly verify cache status.
Age 값을 확인하세요. Age: 0이면 방금 원본에서 가져온 것(Cache MISS 또는 첫 캐싱), 양수면 해당 초만큼 CDN에 캐싱된 상태(Cache HIT)입니다.
Check the Age value in response headers via browser DevTools → Network tab. Age: 0 means it was just fetched from origin (Cache MISS or first caching); a positive value means it has been cached in the CDN for that many seconds (Cache HIT).
⑧ 요청헤더 변조 (클라이언트 → CDN)
⑧ Request Header Manipulation (Client → CDN)
클라이언트가 CDN 서버에 요청을 보낼 때 HTTP 헤더를 동적으로 추가·수정·삭제합니다. 원본 연결/헤더 제어 탭의 요청헤더 변조(CDN → 원본)와 방향이 다릅니다. 특정 URL 패턴에만 선택적으로 적용할 수 있습니다.
Dynamically add, modify, or delete HTTP headers when a client sends a request to the CDN server. The direction differs from the request header manipulation (CDN → Origin) in the Origin Connection / Header Control tab. Can be applied selectively to specific URL patterns.
| 항목 | 설명 | 예시 |
|---|---|---|
| 헤더 이름 | 추가·변경·삭제할 HTTP 헤더 이름 | x-media-type, Authorization |
| 값 | 헤더에 설정할 값. 삭제 액션 선택 시 비워둡니다. | video/mp4 |
| URL 패턴 | 이 규칙을 적용할 URL 패턴. 빈값이면 전체 URL에 적용. | /*.mp4 |
| 액션 | 추가(없으면 추가·있으면 덮어쓰기) / 강제 덮어쓰기 / 삭제 중 선택 | 추가 (헤더가 존재하면 덮어쓰고 없다면 추가) |
| Item | Description | Example |
|---|---|---|
| Header Name | Name of the HTTP header to add, modify, or delete | x-media-type, Authorization |
| Value | Value to set for the header. Leave empty when the Delete action is selected. | video/mp4 |
| URL Pattern | URL pattern this rule applies to. If empty, applies to all URLs. | /*.mp4 |
| Action | Choose from: Add (add if absent, overwrite if present) / Force Overwrite / Delete | Add (overwrite if header exists, add if not) |
⑨ 응답헤더 변조 (CDN → 클라이언트)
⑨ Response Header Manipulation (CDN → Client)
CDN이 클라이언트에 응답을 보낼 때 HTTP 헤더를 동적으로 추가·수정·삭제합니다. 원본 서버가 반환하지 않는 헤더를 CDN 레벨에서 삽입하거나, 노출해서는 안 되는 헤더를 제거할 때 사용합니다.
Dynamically add, modify, or delete HTTP headers when the CDN sends a response to the client. Use this to inject headers that the origin server does not return, or to remove headers that should not be exposed.
- 보안 헤더 삽입: 원본이 반환하지 않는
X-Content-Type-Options: nosniff,X-Frame-Options: DENY를 응답헤더 변조로 일괄 추가 - CORS 헤더 보완: 원본 서버 수정 없이
Access-Control-Allow-Origin헤더를 응답에 삽입 - 민감 헤더 제거:
X-Powered-By,Server헤더를 삭제 액션으로 제거해 서버 정보 노출 방지 - 캐시 정책 강제: 특정 경로(
/*.html)에만Cache-Control: no-cache를 강제 덮어쓰기로 적용
- Inject security headers: Bulk-add
X-Content-Type-Options: nosniffandX-Frame-Options: DENYthat the origin does not return, via response header manipulation - Supplement CORS headers: Insert
Access-Control-Allow-Origininto responses without modifying the origin server - Remove sensitive headers: Delete
X-Powered-ByandServerheaders using the delete action to prevent server info exposure - Enforce cache policy: Force-overwrite
Cache-Control: no-cacheonly for specific paths (/*.html)
캐시 무효화 (퍼지)
원본 콘텐츠를 변경한 후 CDN 엣지에 캐싱된 이전 버전을 강제로 삭제해 최신 콘텐츠를 즉시 제공합니다. 퍼지 탭과 퍼지 히스토리 탭으로 구성됩니다.
After updating origin content, forcibly delete the previous version cached at CDN edges to immediately serve the latest content. Consists of the Purge tab and the Purge History tab.
CDN 엣지 노드에 저장된 캐시를 TTL 만료 전에 강제로 삭제하는 작업입니다. 원본 콘텐츠가 변경됐지만 TTL이 아직 남아 있을 때, 즉시 최신 버전을 제공해야 할 때 사용합니다.
The operation of forcibly deleting cached content stored at CDN edge nodes before TTL expiration. Used when origin content has changed but TTL has not yet expired and the latest version must be served immediately.
특정 파일의 URL을 정확하게 지정해 해당 캐시만 삭제합니다. 쿼리스트링 포함 URL도 별도로 지정할 수 있습니다. 원본 부하가 가장 낮은 방식입니다.
Precisely specify the URL of a particular file to delete only that cache entry. URLs including query strings can be specified separately. This method has the lowest impact on origin load.
와일드카드(*)를 포함한 경로 패턴으로 여러 파일을 한 번에 삭제합니다. 특정 디렉토리나 파일 확장자 전체를 한꺼번에 무효화할 때 사용합니다.
Delete multiple files at once using a path pattern that includes wildcards (*). Use to invalidate an entire directory or all files of a particular extension at once.
해당 도메인의 모든 캐시를 동시에 삭제합니다. 대규모 배포·전체 리뉴얼 시 사용하지만, 이후 모든 요청이 원본으로 집중되므로 트래픽이 적은 시간에 실행해야 합니다.
Simultaneously delete all cached content for the domain. Used for large-scale deployments or full site renewals, but must be executed during low-traffic periods as all subsequent requests will hit the origin.
퍼지 유형 비교
Purge Type Comparison
| 유형 | 삭제 범위 | 원본 부하 | 권장 상황 | 입력 예시 |
|---|---|---|---|---|
| URL 퍼지 | 지정한 URL과 정확히 일치하는 캐시만 삭제 | 낮음 | 특정 이미지·파일·API 응답 수정 | /images/banner.jpg/images/image.png?goodNo=123 |
| 패턴 퍼지 | 와일드카드 패턴에 일치하는 캐시 일괄 삭제 | 중간 | 특정 디렉토리 교체, 파일 확장자 전체 갱신 | /page/*.html/images/*/* |
| 전체 퍼지 | 해당 도메인의 모든 캐시 동시 삭제 | 높음 🚨 | 대규모 배포, 전체 리뉴얼, CDN 설정 대폭 변경 | — |
| Type | Deletion Scope | Origin Load | Recommended Use | Input Example |
|---|---|---|---|---|
| URL Purge | Deletes only the cache that exactly matches the specified URL | Low | Modifying a specific image, file, or API response | /images/banner.jpg/images/image.png?goodNo=123 |
| Pattern Purge | Bulk-deletes all caches matching a wildcard pattern | Medium | Replacing a specific directory, refreshing all files of an extension | /page/*.html/images/*/* |
| Full Purge | Simultaneously deletes all caches for the domain | High 🚨 | Large-scale deployments, full site renewals, major CDN configuration changes | — |
퍼지 실행
Execute Purge
퍼지를 실행하려면 먼저 도메인을 선택한 후 퍼지 유형을 선택하고 내용을 입력합니다. URL 퍼지의 경우 한 줄에 하나씩 URL을 입력하며, 도메인 이름은 포함하지 않고 경로(/)부터 입력합니다.
To execute a purge, first select a domain, then choose the purge type and enter the content. For URL purge, enter one URL per line, starting with the path (/) without including the domain name.
퍼지 히스토리
Purge History
실행된 모든 퍼지 작업의 이력을 확인합니다. 도메인, 퍼지 타입, 날짜로 필터링할 수 있으며, 각 퍼지의 결과(size · time · count)로 실제 삭제된 캐시의 규모를 파악할 수 있습니다.
Review the history of all executed purge operations. Filter by domain, purge type, and date; use each purge's results (size · time · count) to understand the scale of cache actually deleted.
| 컬럼 | 의미 |
|---|---|
| ID | 퍼지 작업의 고유 식별 번호. 오름차순으로 증가합니다. |
| 도메인 | 퍼지가 실행된 CDN 도메인 |
| 타입 | URL / 전체 / 패턴 중 실행된 퍼지 유형 |
| 내용 | 퍼지 대상 URL 또는 패턴. 길면 "펼치기"로 전체 확인 가능 |
| 상태 | 완료 / 진행 중 / 실패 등 퍼지 처리 상태 |
| 결과 | size: 삭제된 캐시 총 용량(bytes), time: 처리 시간(ms), count: 삭제된 캐시 항목 수 |
| 사용자 | 퍼지를 실행한 계정 이메일 |
| 일시 | 퍼지 실행 시각 |
| Column | Meaning |
|---|---|
| ID | Unique identifier for the purge operation. Increases in ascending order. |
| Domain | CDN domain on which the purge was executed |
| Type | Purge type executed: URL / Full / Pattern |
| Content | Target URL or pattern for the purge. If long, use "Expand" to view the full content |
| Status | Purge processing status: Completed / In Progress / Failed, etc. |
| Result | size: total size of deleted cache (bytes), time: processing time (ms), count: number of deleted cache entries |
| User | Email of the account that executed the purge |
| Date/Time | Time the purge was executed |
히스토리 결과 필드 해석
Interpreting History Result Fields
| 결과 필드 | 의미 | 해석 예시 |
|---|---|---|
size |
삭제된 캐시의 총 용량(bytes) | size: 55586692 → 약 53MB의 캐시 삭제됨size: 0 → 해당 URL이 캐시에 없었음 (Cache MISS 상태였음) |
time |
퍼지 처리에 걸린 시간(ms) | time: 8 → 8ms 만에 처리 완료 |
count |
삭제된 캐시 항목(파일) 수 | count: 27 → 27개의 캐시 항목 삭제됨count: 0 → 삭제된 캐시 없음 (미캐싱 상태) |
| Result Field | Meaning | Interpretation Example |
|---|---|---|
size |
Total size of deleted cache (bytes) | size: 55586692 → approximately 53MB of cache deletedsize: 0 → the URL was not in the cache (was in Cache MISS state) |
time |
Time taken to process the purge (ms) | time: 8 → processing completed in 8ms |
count |
Number of deleted cache entries (files) | count: 27 → 27 cache entries deletedcount: 0 → no cache deleted (not cached state) |
/)부터만 입력하는지 확인하세요.
/, without the domain.
상황별 퍼지 가이드
Purge Guide by Situation
| 상황 | 권장 퍼지 유형 | 입력 예시 |
|---|---|---|
| 특정 이미지·파일 1~수십 개 수정 | URL 퍼지 | /images/banner.jpg/css/main.css |
| 특정 디렉토리 전체 교체 | 패턴 퍼지 | /images/* |
| 특정 확장자 전체 갱신 | 패턴 퍼지 | /*.css, /*.js |
| CDN 캐시 설정 변경 후 반영 | 패턴 퍼지 또는 전체 퍼지 | /* 또는 전체 선택 |
| 대규모 배포·전체 사이트 리뉴얼 | 전체 퍼지 (저트래픽 시간대) | — |
| 이미지 최적화 설정 변경 | 패턴 퍼지 | /images/*, /*.jpg |
| Situation | Recommended Purge Type | Input Example |
|---|---|---|
| Modifying 1 to dozens of specific images or files | URL Purge | /images/banner.jpg/css/main.css |
| Replacing an entire specific directory | Pattern Purge | /images/* |
| Refreshing all files of a specific extension | Pattern Purge | /*.css, /*.js |
| Applying changes after CDN cache settings update | Pattern Purge or Full Purge | /* or select All |
| Large-scale deployment or full site renewal | Full Purge (low-traffic period) | — |
| Changing image optimization settings | Pattern Purge | /images/*, /*.jpg |