Add BunnyCDN comprehensive reference document
This commit is contained in:
614
services/bunnycdn.md
Normal file
614
services/bunnycdn.md
Normal file
@@ -0,0 +1,614 @@
|
|||||||
|
---
|
||||||
|
title: BunnyCDN Reference
|
||||||
|
updated: 2026-03-12
|
||||||
|
tags: [cdn, bunnycdn, infrastructure, reference]
|
||||||
|
---
|
||||||
|
|
||||||
|
# BunnyCDN Reference
|
||||||
|
|
||||||
|
Bunny.net CDN 공식 문서 기반 종합 레퍼런스. API, 설정, 보안, 가격 등 실무 참조용.
|
||||||
|
|
||||||
|
## 1. Pull Zone Configuration
|
||||||
|
|
||||||
|
### Origin 설정
|
||||||
|
| 필드 | 타입 | 설명 |
|
||||||
|
|------|------|------|
|
||||||
|
| `OriginUrl` | string | 파일을 가져올 원본 서버 URL |
|
||||||
|
| `OriginType` | enum | `OriginUrl`, `DnsAccelerate`, `StorageZone`, `LoadBalancer`, `EdgeScript`, `MagicContainers`, `PushZone` |
|
||||||
|
| `OriginHostHeader` | string | Origin으로 전송할 Host 헤더 |
|
||||||
|
| `AddHostHeader` | boolean | 요청된 Host 헤더를 origin에 전달 |
|
||||||
|
| `DnsOriginPort` | int32 | Origin 포트 |
|
||||||
|
| `DnsOriginScheme` | string | Origin 프로토콜 (http/https) |
|
||||||
|
| `StorageZoneId` | int64 | Storage Zone을 origin으로 사용 시 ID |
|
||||||
|
| `VerifyOriginSSL` | boolean | Origin SSL 인증서 검증 |
|
||||||
|
|
||||||
|
### 캐싱 설정
|
||||||
|
| 필드 | 타입 | 설명 |
|
||||||
|
|------|------|------|
|
||||||
|
| `CacheControlMaxAgeOverride` | int64 | 캐시 제어 override (초) |
|
||||||
|
| `CacheControlPublicMaxAgeOverride` | int64 | 브라우저 캐시 override (초) |
|
||||||
|
| `IgnoreQueryStrings` | boolean | 캐시 키에서 쿼리스트링 무시 |
|
||||||
|
| `QueryStringVaryParameters` | array | 캐시 키에 사용할 특정 쿼리 파라미터 |
|
||||||
|
| `EnableCacheSlice` | boolean | 비디오 최적화용 cache slicing |
|
||||||
|
| `CacheErrorResponses` | boolean | Origin 에러 응답도 캐시 |
|
||||||
|
| `UseStaleWhileUpdating` | boolean | 업데이트 중 stale 캐시 제공 |
|
||||||
|
| `UseStaleWhileOffline` | boolean | Origin 다운 시 stale 캐시 제공 |
|
||||||
|
| `UseBackgroundUpdate` | boolean | 백그라운드 캐시 갱신 |
|
||||||
|
| `EnableSmartCache` | boolean | 스마트 캐싱 |
|
||||||
|
| `EnableRequestCoalescing` | boolean | 동일 요청 병합 |
|
||||||
|
| `RequestCoalescingTimeout` | int32 | 병합 락 시간 |
|
||||||
|
| `EnableQueryStringOrdering` | boolean | 쿼리스트링 정렬로 캐시 히트율 향상 |
|
||||||
|
|
||||||
|
### Cache Vary 설정
|
||||||
|
| 필드 | 설명 |
|
||||||
|
|------|------|
|
||||||
|
| `EnableWebpVary` | WebP 포맷별 캐시 분리 |
|
||||||
|
| `EnableAvifVary` | AVIF 포맷별 캐시 분리 |
|
||||||
|
| `EnableMobileVary` | 모바일 디바이스별 캐시 분리 |
|
||||||
|
| `EnableCountryCodeVary` | 국가별 캐시 분리 |
|
||||||
|
| `EnableHostnameVary` | 호스트네임별 캐시 분리 |
|
||||||
|
| `EnableCookieVary` | 쿠키별 캐시 분리 |
|
||||||
|
| `CookieVaryParameters` | Vary에 사용할 쿠키 목록 |
|
||||||
|
|
||||||
|
### Origin Reliability
|
||||||
|
| 필드 | 설명 |
|
||||||
|
|------|------|
|
||||||
|
| `OriginRetries` | Origin 재시도 횟수 |
|
||||||
|
| `OriginConnectTimeout` | Origin 연결 타임아웃 (초) |
|
||||||
|
| `OriginResponseTimeout` | Origin 응답 타임아웃 (초) |
|
||||||
|
| `OriginRetry5XXResponses` | 5XX 에러 시 재시도 |
|
||||||
|
| `OriginRetryConnectionTimeout` | 연결 타임아웃 시 재시도 |
|
||||||
|
| `OriginRetryResponseTimeout` | 응답 타임아웃 시 재시도 |
|
||||||
|
| `OriginRetryDelay` | 재시도 전 대기 (ms) |
|
||||||
|
| `FollowRedirects` | Origin 리다이렉트 시 캐시 |
|
||||||
|
|
||||||
|
### Geo Zone (지역별 활성화)
|
||||||
|
- `EnableGeoZoneUS` - 북미
|
||||||
|
- `EnableGeoZoneEU` - 유럽
|
||||||
|
- `EnableGeoZoneASIA` - 아시아/오세아니아
|
||||||
|
- `EnableGeoZoneSA` - 남미
|
||||||
|
- `EnableGeoZoneAF` - 아프리카
|
||||||
|
|
||||||
|
### Pull Zone 타입
|
||||||
|
- `Type`: `Premium` (Standard) 또는 `Volume` (High Volume)
|
||||||
|
- Standard: 119 PoPs, 글로벌 최적 레이턴시
|
||||||
|
- Volume: 10 PoPs, 대용량/비디오에 적합, 저렴
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 2. Custom Hostnames
|
||||||
|
|
||||||
|
### 설정 프로세스
|
||||||
|
1. Pull Zone 생성 시 기본 호스트네임: `{zonename}.b-cdn.net`
|
||||||
|
2. DNS에 CNAME 레코드 추가: `cdn.example.com` -> `{zonename}.b-cdn.net`
|
||||||
|
- TTL: 3600 이하 권장
|
||||||
|
- Proxy 옵션 비활성화 필수 (Cloudflare 등에서)
|
||||||
|
3. Bunny 대시보드에서 Custom Hostname 추가
|
||||||
|
4. SSL 인증서 설정
|
||||||
|
|
||||||
|
### SSL 인증서 옵션
|
||||||
|
| 옵션 | 설명 |
|
||||||
|
|------|------|
|
||||||
|
| Free Let's Encrypt | 자동 발급/갱신. CNAME 설정 후 사용 가능 |
|
||||||
|
| Custom Certificate | Base64 인코딩된 인증서+키 업로드 |
|
||||||
|
| Wildcard SSL | Bunny DNS 사용 시만 자동 발급 가능, 아니면 커스텀 인증서 업로드 필요 |
|
||||||
|
|
||||||
|
### ForceSSL
|
||||||
|
- HTTP -> HTTPS 자동 리다이렉트
|
||||||
|
- 호스트네임별 개별 설정 가능
|
||||||
|
|
||||||
|
### SSL/TLS 프로토콜 설정
|
||||||
|
| 필드 | 설명 |
|
||||||
|
|------|------|
|
||||||
|
| `EnableTLS1` | TLS 1.0 지원 (레거시, 비권장) |
|
||||||
|
| `EnableTLS1_1` | TLS 1.1 지원 (레거시, 비권장) |
|
||||||
|
| `EnableAutoSSL` | 호스트네임 추가 시 자동 SSL |
|
||||||
|
| `DisableLetsEncrypt` | Let's Encrypt 자동 발급 비활성화 |
|
||||||
|
|
||||||
|
### SSL 인증서 유효성 검사
|
||||||
|
- HTTP-01: 기본 방식 (`useOnlyHttp01=true`)
|
||||||
|
- DNS-01: Bunny DNS Zone 존재 시 사용 가능 (`useOnlyHttp01=false`). 와일드카드 도메인은 DNS-01만 지원
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 3. Edge Rules
|
||||||
|
|
||||||
|
### Action 타입 (11종)
|
||||||
|
| Action | 설명 |
|
||||||
|
|--------|------|
|
||||||
|
| Force SSL | HTTP를 HTTPS로 리다이렉트 |
|
||||||
|
| Redirect to URL | 다른 URL로 리다이렉트 |
|
||||||
|
| Change Origin URL | 다른 origin 서버로 라우팅 |
|
||||||
|
| Override Cache Time | 커스텀 캐시 시간 설정 |
|
||||||
|
| Block Request | 조건 매칭 요청 차단 |
|
||||||
|
| Set Response Header | 응답 헤더 추가/수정 |
|
||||||
|
| Set Request Header | Origin으로 보내는 요청 헤더 추가/수정 |
|
||||||
|
| Force Download | 브라우저에서 파일 다운로드 강제 |
|
||||||
|
| Disable/Enable Token Auth | 요청별 토큰 인증 제어 |
|
||||||
|
| Override Browser Cache Time | 브라우저 캐시 시간 커스텀 |
|
||||||
|
| Set Network Rate Limit | 매칭 요청의 대역폭 제한 |
|
||||||
|
|
||||||
|
### Trigger 타입
|
||||||
|
| Trigger | 설명 |
|
||||||
|
|---------|------|
|
||||||
|
| Request URL | URL 경로 매칭 |
|
||||||
|
| Request Header | 특정 HTTP 헤더 매칭 |
|
||||||
|
| Response Header | 응답 헤더 매칭 |
|
||||||
|
| Country Code | GeoIP 국가 코드 매칭 |
|
||||||
|
| Remote IP | 클라이언트 IP 매칭 |
|
||||||
|
| File Extension | 파일 확장자 매칭 |
|
||||||
|
|
||||||
|
### Match 조건
|
||||||
|
- **Match Any**: 하나라도 매칭되면 실행
|
||||||
|
- **Match All**: 모든 조건 매칭 시 실행
|
||||||
|
- **Match None**: 어떤 것도 매칭되지 않을 때 실행
|
||||||
|
- 하나의 룰에 여러 트리거 + 여러 액션 설정 가능
|
||||||
|
|
||||||
|
### Variable Expansion
|
||||||
|
Edge Rules에서 `%{Collection.Key}` 문법으로 동적 변수 사용 가능.
|
||||||
|
|
||||||
|
**지원 액션**: Change Origin URL, Redirect to URL, Set Request Header, Set Response Header
|
||||||
|
|
||||||
|
| Collection | 변수 | 설명 |
|
||||||
|
|------------|-------|------|
|
||||||
|
| RequestHeaders | `%{RequestHeaders.Host}` | 요청 Host 헤더 |
|
||||||
|
| RequestHeaders | `%{RequestHeaders.User-Agent}` | User-Agent |
|
||||||
|
| RequestHeaders | `%{RequestHeaders.Accept-Language}` | 언어 |
|
||||||
|
| Query | `%{Query.paramname}` | 쿼리 파라미터 값 |
|
||||||
|
| Request | `%{Request.Method}` | HTTP 메서드 |
|
||||||
|
| Request | `%{Request.Path}` | 전체 경로 (쿼리 포함) |
|
||||||
|
| Request | `%{Request.QueryString}` | 쿼리스트링만 |
|
||||||
|
| Path | `%{Path.0}`, `%{Path.0-2}`, `%{Path.3-}` | URL 경로 세그먼트 (인덱스/범위) |
|
||||||
|
| Url | `%{Url.FileName}` | 파일명 |
|
||||||
|
| Url | `%{Url.Extension}` | 확장자 |
|
||||||
|
| Url | `%{Url.Directory}` | 디렉토리 |
|
||||||
|
| Url | `%{Url.Hostname}` | 호스트네임 |
|
||||||
|
| User | `%{User.IP}` | 클라이언트 IP |
|
||||||
|
| User | `%{User.CountryCode}` | 2자리 국가 코드 |
|
||||||
|
| Server | `%{Server.ZoneCode}` | 서버 존 코드 |
|
||||||
|
| Server | `%{Server.ID}` | 서버 ID |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 4. API Reference
|
||||||
|
|
||||||
|
### 기본 정보
|
||||||
|
- **Base URL**: `https://api.bunny.net`
|
||||||
|
- **인증**: `AccessKey` 헤더에 API 키
|
||||||
|
- **API 키 위치**: 대시보드 > Account > API Keys
|
||||||
|
|
||||||
|
### API 카테고리
|
||||||
|
| 카테고리 | 설명 |
|
||||||
|
|----------|------|
|
||||||
|
| Pull Zones | CDN 존 관리 |
|
||||||
|
| Storage Zones | 엣지 스토리지 |
|
||||||
|
| DNS Zones | DNS 관리 |
|
||||||
|
| Stream Video Libraries | 비디오 콘텐츠 |
|
||||||
|
| Statistics | 대역폭/성능 통계 |
|
||||||
|
| Billing | 과금/소비 데이터 |
|
||||||
|
| Purge | 캐시 무효화 |
|
||||||
|
| API Keys | 자격증명 관리 |
|
||||||
|
| Countries | 지역 차단 참조 |
|
||||||
|
| Regions | 엣지 서버 위치 |
|
||||||
|
|
||||||
|
### 주요 Pull Zone 엔드포인트
|
||||||
|
|
||||||
|
#### List Pull Zones
|
||||||
|
```
|
||||||
|
GET /pullzone
|
||||||
|
Query: page, perPage (5-1000), search, includeCertificate
|
||||||
|
Response: { Items[], CurrentPage, TotalItems, HasMoreItems }
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Add Pull Zone
|
||||||
|
```
|
||||||
|
POST /pullzone
|
||||||
|
Body: { Name, OriginUrl, Type, ... }
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Update Pull Zone
|
||||||
|
```
|
||||||
|
POST /pullzone/{id}
|
||||||
|
Body: (전체 설정 필드 - 섹션 1 참조)
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Delete Pull Zone
|
||||||
|
```
|
||||||
|
DELETE /pullzone/{id}
|
||||||
|
```
|
||||||
|
|
||||||
|
### Hostname 관리 엔드포인트
|
||||||
|
|
||||||
|
#### Add Custom Hostname
|
||||||
|
```
|
||||||
|
POST /pullzone/{id}/addHostname
|
||||||
|
Body: { "Hostname": "cdn.example.com" }
|
||||||
|
Response: 204
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Remove Custom Hostname
|
||||||
|
```
|
||||||
|
DELETE /pullzone/{id}/removeHostname
|
||||||
|
Body: { "Hostname": "cdn.example.com" }
|
||||||
|
Response: 204
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Set Force SSL
|
||||||
|
```
|
||||||
|
POST /pullzone/{id}/setForceSSL
|
||||||
|
Body: { "Hostname": "cdn.example.com", "ForceSSL": true }
|
||||||
|
Response: 204
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Load Free Certificate (Let's Encrypt)
|
||||||
|
```
|
||||||
|
GET /pullzone/loadFreeCertificate?hostname=cdn.example.com&useOnlyHttp01=true
|
||||||
|
- useOnlyHttp01=false: Bunny DNS Zone 존재 시 DNS-01 검증 시도
|
||||||
|
- 와일드카드 도메인: DNS-01만 지원
|
||||||
|
Response: 200
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Add Custom Certificate
|
||||||
|
```
|
||||||
|
POST /pullzone/{id}/addCertificate
|
||||||
|
Body: {
|
||||||
|
"Hostname": "cdn.example.com",
|
||||||
|
"Certificate": "<base64-encoded-cert>",
|
||||||
|
"CertificateKey": "<base64-encoded-key>"
|
||||||
|
}
|
||||||
|
Response: 204
|
||||||
|
```
|
||||||
|
|
||||||
|
### Cache Purge 엔드포인트
|
||||||
|
|
||||||
|
#### Purge Pull Zone Cache (전체 또는 태그별)
|
||||||
|
```
|
||||||
|
POST /pullzone/{id}/purgeCache
|
||||||
|
Body: { "CacheTag": "optional-tag" } // CacheTag 생략 시 전체 퍼지
|
||||||
|
Response: 204
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Purge URL (개별 URL)
|
||||||
|
```
|
||||||
|
POST /purge?url=https://cdn.example.com/path/file.js
|
||||||
|
Response: 204
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 5. Bunny Shield (DDoS Protection)
|
||||||
|
|
||||||
|
### 개요
|
||||||
|
Bunny Shield는 통합 보안 스택. 200+ Tbps 네트워크, 119개 글로벌 스크러빙 센터.
|
||||||
|
|
||||||
|
### 주요 기능 6가지
|
||||||
|
| 기능 | 설명 |
|
||||||
|
|------|------|
|
||||||
|
| WAF | OWASP Top 10, zero-day 익스플로잇 차단 |
|
||||||
|
| DDoS Protection | 대규모 공격 완화, stateful mitigation |
|
||||||
|
| Rate Limiting | IP/사용자/경로별 요청 제한 |
|
||||||
|
| Bot Detection | 악성 봇 실시간 탐지/차단 |
|
||||||
|
| Access Lists | VPN, Tor 노드 등 차단 |
|
||||||
|
| Upload Scanning | 파일 바이러스/악성코드/CSAM 스캔 |
|
||||||
|
|
||||||
|
### DDoS Protection 설정
|
||||||
|
Pull Zone 필드:
|
||||||
|
- `ShieldDDosProtectionEnabled`: boolean
|
||||||
|
- `ShieldDDosProtectionType`: `DetectOnly`, `ActiveStandard`, `ActiveAggressive`
|
||||||
|
|
||||||
|
### DDoS 보호 메커니즘
|
||||||
|
1. **Stateful Request Tracking**: 요청 정당성 검증
|
||||||
|
2. **JavaScript Proof-of-Work Challenge**: 브라우저에 연산 과제 부여, 봇 차별화
|
||||||
|
3. **Behavioral Analysis**: 실시간 트래픽 패턴 분석
|
||||||
|
|
||||||
|
### DDoS Sensitivity 레벨
|
||||||
|
| 레벨 | 값 | 설명 |
|
||||||
|
|------|-----|------|
|
||||||
|
| Low | 1 | 최소 보호 |
|
||||||
|
| Medium | 2 | 권장 시작점 |
|
||||||
|
| High | 3 | 강화 보호 |
|
||||||
|
| Extreme | 4 | 항시 활성화 (Always-On) |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 6. WAF (Web Application Firewall)
|
||||||
|
|
||||||
|
### 보호 범위
|
||||||
|
- **SQL Injection**: 쿼리 파라미터/폼의 SQL 인젝션 탐지/차단
|
||||||
|
- **XSS Protection**: 악성 스크립트 실행 시도 차단
|
||||||
|
- **Remote File Inclusion (RFI)**: 원격 서버 파일 포함 시도 차단
|
||||||
|
- **OWASP Top 10**: 전체 커버리지
|
||||||
|
|
||||||
|
### 기능
|
||||||
|
- AI 기반 자동 위협 탐지
|
||||||
|
- 커스텀 보안 규칙 설정 가능
|
||||||
|
- 실시간 트래픽 모니터링
|
||||||
|
- 저레이턴시 처리
|
||||||
|
- 정기적 위협 정의 업데이트
|
||||||
|
|
||||||
|
### WAF 로그 API
|
||||||
|
```
|
||||||
|
GET https://api.bunny.net/shield/event-logs/{shieldZoneId}
|
||||||
|
```
|
||||||
|
차단/허용 트래픽의 상세 로그 조회.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 7. Optimizer (Image Optimization)
|
||||||
|
|
||||||
|
### 가격
|
||||||
|
- **$9.50/월** per Pull Zone
|
||||||
|
- 무제한 요청, 무제한 최적화, 무제한 이미지
|
||||||
|
- 대역폭은 별도 과금
|
||||||
|
|
||||||
|
### 설정 필드
|
||||||
|
| 필드 | 설명 |
|
||||||
|
|------|------|
|
||||||
|
| `OptimizerEnabled` | Optimizer 활성화 |
|
||||||
|
| `OptimizerEnableWebP` | WebP 포맷 변환 |
|
||||||
|
| `OptimizerEnableManipulationEngine` | 이미지 조작 엔진 |
|
||||||
|
| `OptimizerImageQuality` | 데스크톱 이미지 품질 (1-100) |
|
||||||
|
| `OptimizerMobileImageQuality` | 모바일 이미지 품질 (1-100) |
|
||||||
|
| `OptimizerDesktopMaxWidth` | 데스크톱 최대 이미지 폭 (0-5000) |
|
||||||
|
| `OptimizerMobileMaxWidth` | 모바일 최대 이미지 폭 (0-5000) |
|
||||||
|
| `OptimizerMinifyCSS` | CSS 미니파이 |
|
||||||
|
| `OptimizerMinifyJavaScript` | JavaScript 미니파이 |
|
||||||
|
| `OptimizerPrerenderHtml` | SEO HTML 프리렌더 |
|
||||||
|
| `OptimizerAutomaticOptimizationEnabled` | 자동 최적화 |
|
||||||
|
| `OptimizerEnableUpscaling` | 이미지 업스케일링 |
|
||||||
|
| `OptimizerTunnelEnabled` | Origin 터널 최적화 |
|
||||||
|
|
||||||
|
### Watermark 설정
|
||||||
|
| 필드 | 설명 |
|
||||||
|
|------|------|
|
||||||
|
| `OptimizerWatermarkEnabled` | 워터마크 활성화 |
|
||||||
|
| `OptimizerWatermarkUrl` | 워터마크 이미지 URL |
|
||||||
|
| `OptimizerWatermarkPosition` | `BottomLeft`, `BottomRight`, `TopLeft`, `TopRight`, `Center`, `CenterStretch` |
|
||||||
|
| `OptimizerWatermarkOffset` | 오프셋 거리 |
|
||||||
|
| `OptimizerWatermarkMinImageSize` | 워터마크 적용 최소 이미지 크기 |
|
||||||
|
|
||||||
|
### Static HTML Optimization
|
||||||
|
- `OptimizerStaticHtmlEnabled`: 정적 HTML 최적화
|
||||||
|
- `OptimizerStaticHtmlWordPressPath`: WordPress 경로
|
||||||
|
- `OptimizerStaticHtmlWordPressBypassCookie`: WordPress 바이패스 쿠키
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 8. DNS Integration
|
||||||
|
|
||||||
|
### Bunny DNS 지원 레코드 타입
|
||||||
|
| Enum | 타입 | 설명 |
|
||||||
|
|------|------|------|
|
||||||
|
| 0 | A | IPv4 |
|
||||||
|
| 1 | AAAA | IPv6 |
|
||||||
|
| 2 | CNAME | Canonical Name |
|
||||||
|
| 3 | TXT | 텍스트 |
|
||||||
|
| 4 | MX | 메일 |
|
||||||
|
| 5 | Redirect (RDR) | 리다이렉트 레코드 |
|
||||||
|
| 6 | Flatten | CNAME Flattening |
|
||||||
|
| 7 | PullZone | Pull Zone 직접 매핑 |
|
||||||
|
| 8 | SRV | Service |
|
||||||
|
| 9 | CAA | Certificate Authority Authorization |
|
||||||
|
| 10 | PTR | Pointer |
|
||||||
|
| 11 | Script | DNS 스크립트 연결 |
|
||||||
|
| 12 | NS | Name Server |
|
||||||
|
| 13 | SVCB | Service Binding |
|
||||||
|
| 14 | HTTPS | HTTPS Service |
|
||||||
|
| 15 | TLSA | TLS Authentication |
|
||||||
|
|
||||||
|
### 특수 레코드
|
||||||
|
- **PullZone 레코드**: DNS 레코드를 기존 Pull Zone에 직접 매핑
|
||||||
|
- **Flatten 레코드**: 루트 도메인에서 CNAME 기능 (ANAME 역할)
|
||||||
|
- **Script 레코드**: DNS 스크립트 연결
|
||||||
|
- **Accelerated 레코드**: CDN 가속을 위한 Pull Zone 연결 (`Accelerated: true`, `AcceleratedPullZoneId`)
|
||||||
|
|
||||||
|
### DNS API
|
||||||
|
```
|
||||||
|
PUT /dnszone/{zoneId}/records
|
||||||
|
Body: {
|
||||||
|
"Type": 0, // 레코드 타입 enum
|
||||||
|
"Name": "cdn",
|
||||||
|
"Value": "1.2.3.4",
|
||||||
|
"Ttl": 3600,
|
||||||
|
"Priority": 0,
|
||||||
|
"Accelerated": true,
|
||||||
|
"PullZoneId": 12345,
|
||||||
|
"AutoSslIssuance": true,
|
||||||
|
"MonitorType": 0, // 0-3
|
||||||
|
"SmartRoutingType": 0, // 0-2
|
||||||
|
"Comment": "CDN record"
|
||||||
|
}
|
||||||
|
Response: 201
|
||||||
|
```
|
||||||
|
|
||||||
|
### DNS 모니터링
|
||||||
|
Bunny DNS는 레코드 모니터링 기능 내장 (`MonitorType` 필드).
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 9. Origin Shield
|
||||||
|
|
||||||
|
### 개요
|
||||||
|
Origin Shield는 CDN 엣지 PoP와 Origin 사이의 **2차 캐싱 레이어**.
|
||||||
|
전 세계 여러 PoP에서 같은 파일 요청 시, Origin Shield가 단일 캐싱 포인트로 동작하여 Origin 트래픽을 대폭 감소.
|
||||||
|
|
||||||
|
### 설정 필드
|
||||||
|
| 필드 | 설명 |
|
||||||
|
|------|------|
|
||||||
|
| `EnableOriginShield` | Origin Shield 활성화 |
|
||||||
|
| `OriginShieldZoneCode` | Shield 위치 존 코드 |
|
||||||
|
| `OriginShieldEnableConcurrencyLimit` | 동시 요청 제한 |
|
||||||
|
| `OriginShieldMaxConcurrentRequests` | 최대 동시 요청 수 |
|
||||||
|
| `OriginShieldQueueMaxWaitTime` | 큐 최대 대기 시간 (ms) |
|
||||||
|
| `OriginShieldMaxQueuedRequests` | 최대 큐 요청 수 |
|
||||||
|
|
||||||
|
### 동작 방식
|
||||||
|
```
|
||||||
|
사용자 -> 엣지 PoP (1차 캐시) -> Origin Shield (2차 캐시) -> Origin 서버
|
||||||
|
```
|
||||||
|
- 엣지 PoP 캐시 미스 시, Origin 직접 요청 대신 Origin Shield에 요청
|
||||||
|
- Origin Shield에 캐시가 있으면 바로 응답
|
||||||
|
- Origin Shield도 캐시 미스면 Origin에 1회만 요청
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 10. WebSocket Support
|
||||||
|
|
||||||
|
### 설정
|
||||||
|
| 필드 | 타입 | 설명 |
|
||||||
|
|------|------|------|
|
||||||
|
| `EnableWebSockets` | boolean | WebSocket 프로토콜 연결 허용 |
|
||||||
|
| `MaxWebSocketConnections` | int32 | 최대 동시 WebSocket 연결 (500-25,000) |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 11. Logging and Monitoring
|
||||||
|
|
||||||
|
### 로그 설정
|
||||||
|
| 필드 | 설명 |
|
||||||
|
|------|------|
|
||||||
|
| `EnableLogging` | 액세스 로깅 활성화 |
|
||||||
|
| `LogFormat` | `Plain` 또는 `JSON` |
|
||||||
|
| `LoggingIPAnonymizationEnabled` | IP 익명화 |
|
||||||
|
| `LogAnonymizationType` | `OneDigit` 또는 `Drop` |
|
||||||
|
| `LoggingSaveToStorage` | 로그를 Storage Zone에 저장 |
|
||||||
|
| `LoggingStorageZoneId` | 로그 저장 Storage Zone ID |
|
||||||
|
|
||||||
|
### Log Forwarding (실시간 로그 전송)
|
||||||
|
| 필드 | 설명 |
|
||||||
|
|------|------|
|
||||||
|
| `LogForwardingEnabled` | 로그 포워딩 활성화 |
|
||||||
|
| `LogForwardingHostname` | Syslog 엔드포인트 호스트 |
|
||||||
|
| `LogForwardingPort` | 포트 |
|
||||||
|
| `LogForwardingToken` | 인증 토큰 |
|
||||||
|
| `LogForwardingProtocol` | `UDP`, `TCP`, `TCPEncrypted`, `DataDog` |
|
||||||
|
| `LogForwardingFormat` | `Plain` 또는 `JSON` |
|
||||||
|
|
||||||
|
### Log Forwarding 특성
|
||||||
|
- Syslog RFC 5424 포맷
|
||||||
|
- 10-30초 딜레이
|
||||||
|
- UDP: 암호화 없음, 패킷 손실 가능
|
||||||
|
- TCP/TCPEncrypted: 안정적 전송
|
||||||
|
- DataDog 직접 연동 지원
|
||||||
|
|
||||||
|
### 보안/접근제어 관련 로깅
|
||||||
|
- WAF 로그: `GET /shield/event-logs/{shieldZoneId}`
|
||||||
|
- Pull Zone 통계: Statistics API
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 12. Pricing
|
||||||
|
|
||||||
|
### Monthly Minimum
|
||||||
|
**$1/월**
|
||||||
|
|
||||||
|
### Standard Network (119 PoPs)
|
||||||
|
| 지역 | 가격/GB |
|
||||||
|
|------|---------|
|
||||||
|
| Europe & North America | $0.01 |
|
||||||
|
| Asia & Oceania | $0.03 |
|
||||||
|
| South America | $0.045 |
|
||||||
|
| Middle East & Africa | $0.06 |
|
||||||
|
|
||||||
|
### Volume Network (10 PoPs)
|
||||||
|
| 구간 | 가격/GB |
|
||||||
|
|------|---------|
|
||||||
|
| 0 - 500 TB | $0.005 |
|
||||||
|
| 500 TB - 1 PB | $0.004 |
|
||||||
|
| 1 PB - 2 PB | $0.002 |
|
||||||
|
| 2 PB+ | 커스텀 (영업 문의) |
|
||||||
|
|
||||||
|
### 추가 서비스 가격
|
||||||
|
| 서비스 | 가격 |
|
||||||
|
|--------|------|
|
||||||
|
| Bunny Optimizer | $9.50/월 per Pull Zone |
|
||||||
|
| Bunny Shield | 별도 (보안 기능 통합) |
|
||||||
|
| Storage Zone | 별도 과금 |
|
||||||
|
| Stream | 별도 과금 |
|
||||||
|
|
||||||
|
### Pull Zone 설정으로 비용 제어
|
||||||
|
- `MonthlyBandwidthLimit`: 월간 대역폭 한도 (bytes)
|
||||||
|
- `BudgetRedirectedCountries`: 특정 국가를 저렴한 지역으로 리다이렉트
|
||||||
|
- 지역별 Geo Zone 활성화/비활성화로 과금 지역 제어
|
||||||
|
- 언제든 Standard <-> Volume 전환 가능
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 13. Security & Access Control (기타)
|
||||||
|
|
||||||
|
### Referrer/IP 제어
|
||||||
|
| 필드 | 설명 |
|
||||||
|
|------|------|
|
||||||
|
| `AllowedReferrers` | 허용 Referrer 호스트 목록 |
|
||||||
|
| `BlockedReferrers` | 차단 Referrer 호스트 목록 |
|
||||||
|
| `BlockNoneReferrer` | Referrer 없는 직접 접근 차단 |
|
||||||
|
| `BlockedIps` | IP 차단 목록 |
|
||||||
|
| `BlockedCountries` | 국가 코드 차단 (2자리) |
|
||||||
|
| `BlockRootPathAccess` | 루트 경로 접근 차단 |
|
||||||
|
| `BlockPostRequests` | POST 요청 차단 |
|
||||||
|
|
||||||
|
### Rate Limiting (Pull Zone 레벨)
|
||||||
|
| 필드 | 설명 |
|
||||||
|
|------|------|
|
||||||
|
| `ConnectionLimitPerIPCount` | IP당 최대 연결 수 |
|
||||||
|
| `RequestLimit` | 초당 최대 요청 |
|
||||||
|
| `LimitRatePerSecond` | IP별 초당 속도 제한 |
|
||||||
|
| `LimitRateAfter` | 속도 제한 전 전송량 |
|
||||||
|
| `BurstSize` | IP 차단 전 최대 버스트 |
|
||||||
|
|
||||||
|
### Token Authentication
|
||||||
|
- `ZoneSecurityEnabled`: URL 토큰 인증 활성화
|
||||||
|
- `ZoneSecurityIncludeHashRemoteIP`: 토큰에 원격 IP 포함
|
||||||
|
|
||||||
|
### CORS
|
||||||
|
- `EnableAccessControlOriginHeader`: CORS 헤더 활성화
|
||||||
|
- `AccessControlOriginHeaderExtensions`: CORS 적용 파일 확장자
|
||||||
|
|
||||||
|
### AWS S3 Origin 연동
|
||||||
|
- `AWSSigningEnabled`: AWS 요청 서명
|
||||||
|
- `AWSSigningKey`, `AWSSigningSecret`, `AWSSigningRegionName`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 14. 기타 기능
|
||||||
|
|
||||||
|
### Perma-Cache
|
||||||
|
- `PermaCacheStorageZoneId`: 영구 캐시용 Storage Zone
|
||||||
|
- `PermaCacheType`: `Automatic` 또는 `Manual`
|
||||||
|
|
||||||
|
### Custom Error Pages
|
||||||
|
- `ErrorPageEnableCustomCode`: 커스텀 에러 페이지 HTML
|
||||||
|
- `ErrorPageCustomCode`: HTML 코드
|
||||||
|
- `ErrorPageWhitelabel`: 브랜딩 제거
|
||||||
|
|
||||||
|
### Preloading Screen
|
||||||
|
- `PreloadingScreenEnabled`: 로딩 화면 표시
|
||||||
|
- `PreloadingScreenTheme`: `Light` / `Dark`
|
||||||
|
- `PreloadingScreenDelay`: 표시 전 딜레이 (0-10,000ms)
|
||||||
|
- DDoS Challenge 등에서 사용
|
||||||
|
|
||||||
|
### Sticky Sessions
|
||||||
|
- `StickySessionType`: `Off` / `On`
|
||||||
|
- `StickySessionCookieName`: 세션 쿠키 이름
|
||||||
|
- `StickySessionClientHeaders`: 클라이언트 식별 헤더
|
||||||
|
|
||||||
|
### AI 기능
|
||||||
|
- `EnableBunnyImageAi`: AI 이미지 생성
|
||||||
|
- `BunnyAiImageBlueprints`: AI 이미지 블루프린트
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 참고 링크
|
||||||
|
|
||||||
|
- [API Reference](https://docs.bunny.net/reference/bunnynet-api-overview)
|
||||||
|
- [Pull Zone API](https://docs.bunny.net/reference/pullzonepublic_index)
|
||||||
|
- [Edge Rules Docs](https://docs.bunny.net/cdn/edge-rules)
|
||||||
|
- [Variable Expansion](https://docs.bunny.net/cdn/edge-rules/variable-expansion)
|
||||||
|
- [Bunny Shield](https://docs.bunny.net/docs/bunny-shield-documentation)
|
||||||
|
- [WAF](https://docs.bunny.net/docs/shield-waf)
|
||||||
|
- [DDoS Mitigation](https://docs.bunny.net/docs/shield-ddos-mitigation)
|
||||||
|
- [Rate Limiting](https://docs.bunny.net/shield/rate-limiting)
|
||||||
|
- [Log Forwarding](https://docs.bunny.net/cdn/logging/forwarding)
|
||||||
|
- [CDN Pricing](https://bunny.net/pricing/cdn/)
|
||||||
|
- [Optimizer Pricing](https://bunny.net/pricing/optimizer/)
|
||||||
|
- [Support Hub](https://support.bunny.net/hc/en-us/)
|
||||||
Reference in New Issue
Block a user