CDN з регіональними точками присутності
CDN (Content Delivery Network) кешує статичні ресурси на серверах по всьому світу. Користувач з Владивостока отримує зображення з сервера у Новосибірську або Токіо — не з Москви. Різниця у TTFB — сотні мілісекунд.
Вибір CDN-провайдера
| Провайдер | PoP у СНГ | Особливості |
|---|---|---|
| Cloudflare | Москва, Київ, Алмату | Бесплатний базовий план, WAF |
| Gcore | 10+ точок у СНГ | Найкраще покриття Росії |
| AWS CloudFront | Москва | Інтеграція з S3, Lambda@Edge |
| Bunny CDN | Москва | Дешеве, просте |
| VK Cloud CDN | СНГ | Для російського трафіку |
Настройка Cloudflare CDN
Після підключення домена до Cloudflare, настройка кешування:
Page Rules для статики:
URL: *.example.com/assets/*
Cache Level: Cache Everything
Edge Cache TTL: 1 month
Browser Cache TTL: 1 week
Cloudflare Cache Rules (новий інтерфейс):
Field: URI Path
Operator: starts with
Value: /assets/
Action: Cache eligibility → Eligible for cache
Cache TTL: 30 days
Настройка AWS CloudFront
{
"Origins": [{
"DomainName": "example.com",
"Id": "origin-1",
"CustomOriginConfig": {
"HTTPSPort": 443,
"OriginProtocolPolicy": "https-only"
}
}],
"DefaultCacheBehavior": {
"TargetOriginId": "origin-1",
"ViewerProtocolPolicy": "redirect-to-https",
"CachePolicyId": "658327ea-f89d-4fab-a63d-7e88639e58f6"
},
"CacheBehaviors": [{
"PathPattern": "/assets/*",
"TargetOriginId": "origin-1",
"CachePolicyId": "CACHING_OPTIMIZED_POLICY_ID",
"Compress": true
}]
}
Правильні заголовки кешування на сервері
CDN поважає заголовки origin-сервера. Nginx конфігурація:
location ~* \.(js|css|woff2|png|jpg|webp|svg)$ {
expires 1y;
add_header Cache-Control "public, immutable";
add_header Vary "Accept-Encoding";
}
location ~* \.html$ {
expires 1h;
add_header Cache-Control "public, must-revalidate";
}
immutable повідомляє браузеру: не робити conditional request навіть при оновленні сторінки. Працює з content-hashed іменами файлів (app.a1b2c3.js).
Cache Invalidation
При деплої нового коду потрібно інвалідувати кеш CDN:
# Cloudflare
curl -X POST "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/purge_cache" \
-H "Authorization: Bearer $CF_TOKEN" \
-d '{"purge_everything":true}'
# AWS CloudFront
aws cloudfront create-invalidation \
--distribution-id $DIST_ID \
--paths "/assets/*"
У CI/CD pipeline інвалідація запускається автоматично після деплоя.
Терміни
Настройка CDN з кешуванням та авто-інвалідацією при деплої: 1–2 робочих дні.







