Ответ
При настройке CloudFront для раздачи статики и ускорения API я обращаю внимание на несколько ключевых групп настроек.
1. Origin Settings (Источник):
- Origin Domain: Указываю S3 bucket, Application Load Balancer (ALB) или кастомный HTTP-сервер (например, EC2). Для S3 важно правильно настроить bucket policy для доступа от CloudFront.
- Origin Protocol Policy: Выбираю
HTTPS OnlyилиMatch Viewer, чтобы обеспечить шифрование всего трафика до origin, даже если viewer запрашивает по HTTP. - Origin Shield: Включаю для глобально распределенных приложений. Это дополнительный региональный кэш-слой, который снижает нагрузку на мой primary origin и улучшает hit ratio.
2. Cache Behavior & TTL (Поведение кэширования):
- Path Pattern: Создаю отдельные поведения для разных путей. Например,
/static/*кэшируется надолго, а/api/*— с минимальным TTL или вообще без кэша (Cache PolicyсCachingDisabled). - Cache Keys & Query Strings: Настраиваю, какие query-параметры (
session_id,utm_source) включать в ключ кэша. Для статики обычно отключаю (Cache policyсCachingOptimized), для динамического контента — включаю выборочно. - TTL (Time To Live): Задаю минимальное, максимальное и дефолтное время жизни объекта в кэше Edge-локаций. Для неизменяемых ассетов (хешированные JS/CSS) ставлю
max_ttlна год.
3. Security & Access (Безопасность):
- HTTPS: Обязательно настраиваю использование TLS, используя сертификат из AWS Certificate Manager (ACM), который предоставляется бесплатно.
- AWS WAF Integration: Прикрепляю Web ACL к дистрибутиву для защиты от распространенных атак (OWASP Top 10, DDoS). Создаю кастомные правила для блокировки подозрительных User-Agents или IP-адресов.
- Signed URLs / Cookies: Использую для предоставления временного доступа к премиум-контенту или защищенным файлам. Генерирую подписанные URL на бэкенде с ограничением по времени и IP.
4. Logging & Monitoring (Логи и мониторинг):
- Access Logs: Включаю сохранение детальных логов доступа в S3 bucket для последующего анализа в Athena или QuickSight.
- CloudWatch Metrics: Отслеживаю метрики вроде
TotalErrorRate,CacheHitRateиBytesDownloadedдля оценки эффективности и выявления проблем.
Пример настройки через Terraform (с акцентом на TTL и origin):
resource "aws_cloudfront_distribution" "app_cdn" {
origin {
domain_name = aws_lb.main.dns_name
origin_id = "alb-origin"
custom_origin_config {
http_port = 80
https_port = 443
origin_protocol_policy = "https-only"
origin_ssl_protocols = ["TLSv1.2"]
}
}
default_cache_behavior {
target_origin_id = "alb-origin"
cache_policy_id = "4135ea2d-6df8-44a3-9df3-4b5a84be39ad" # Managed-CachingOptimized
viewer_protocol_policy = "redirect-to-https"
}
ordered_cache_behavior {
path_pattern = "/api/*"
target_origin_id = "alb-origin"
cache_policy_id = "4135ea2d-6df8-44a3-9df3-4b5a84be39ad"
origin_request_policy_id = "216adef6-5c7f-47e4-b989-5492eafa07d3" # Managed-AllViewer
viewer_protocol_policy = "redirect-to-https"
}
}