Настройка 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 рабочих дня.







