Настройка Fastly CDN: VCL, кэширование, тегированная инвалидация

Когда сайт начинает тормозить из-за роста трафика, а обновление контента требует долгой очистки кеша, стандартные CDN не справляются. Мы настраиваем Fastly CDN с программируемой логикой VCL и тегированной инвалидацией, чтобы вы получили полный контроль над кэшированием. Наша команда реализует проект под ключ — от аудита до поддержки, обеспечивая стабильную работу и мгновенное обновление данных.

Разработка и обслуживание любых видов сайтов:

Информационные сайты или веб-приложения
Сайты визитки, landing page, корпоративные сайты, онлайн каталоги, квиз, промо-сайты, блоги, новостные ресурсы, информационные порталы, форумы, агрегаторы
Сайты или веб-приложения электронной коммерции
Интернет-магазины, B2B-порталы, маркетплейсы, онлайн-обменники, кэшбэк-сайты, биржи, дропшиппинг-платформы, парсеры товаров
Веб-приложения для управления бизнес-процессами
CRM-системы, ERP-системы, корпоративные порталы, системы управления производством, парсеры информации
Сайты или веб-приложения электронных услуг
Доски объявлений, онлайн-школы, онлайн-кинотеатры, конструкторы сайтов, порталы предоставления электронных услуг, видеохостинги, тематические порталы

Это лишь некоторые из технических типов сайтов, с которыми мы работаем, и каждый из них может иметь свои специфические особенности и функциональность, а также быть адаптированным под конкретные потребности и цели клиента

Услуги, которые мы предлагаем
Показано 1 из 1Все 2062 услуг
Настройка Fastly CDN: VCL, кэширование, тегированная инвалидация
Сложный
~2-3 дня
Часто задаваемые вопросы

Настройка Fastly CDN для высоконагруженных проектов

Отметим: когда ваш сайт начинает тормозить из-за резкого роста трафика, а инвалидация кеша занимает минуты, стандартные CDN перестают справляться. Мы часто видим проекты, где контент обновляется раз в несколько секунд, а кеш живёт час — в итоге пользователи видят устаревшие данные. Fastly решает эту проблему благодаря мгновенной инвалидации (< 150 мс по всей сети) и программируемой логике на edge через VCL и Compute@Edge. Это выбор для проектов, где нужен полный контроль над кэшированием и гибкость в настройке.

Мы используем Fastly для проектов с динамическим контентом: новостные порталы, интернет-магазины, SaaS-платформы. После настройки CDN HIT-ratio достигает 95%, что снижает нагрузку на бэкенд на 80%. Ниже разберём ключевые возможности и практические примеры настройки.

Почему Fastly лучше других CDN?

Возможность Fastly Cloudflare CloudFront
Инвалидация кеша < 150 мс 1–30 с 1–5 мин
Программирование edge VCL + WASM Workers (JS) Functions (JS)
Тег-инвалидация Да (Surrogate-Key) Нет Нет
Real-time логи Да Да Через S3
Streaming Отличное Хорошее Хорошее

Fastly инвалидирует кеш в 10 раз быстрее CloudFront и в 20 раз быстрее Cloudflare. А тег-инвалидация Surrogate-Key позволяет сбрасывать кеш только для связанных страниц, не затрагивая весь сайт.

Как мы настраиваем Fastly CDN: этапы

Настройка проходит в несколько этапов:

  1. Аналитика — аудит текущей архитектуры, трафика и требований к кешированию.
  2. Проектирование — разработка VCL-логики: какие URL кешировать, какие пропускать, как обрабатывать Cookies.
  3. Реализация — развёртывание сервиса через Terraform или API, написание VCL-правил, настройка Surrogate-Key на backend.
  4. Тестирование — проверка инвалидации, производительности, корректности кеширования.
  5. Деплой — включение CDN на продакшене, мониторинг и оптимизация.
Этап Длительность Результат
Аналитика 1–2 дня Архитектурная схема, требования
Проектирование 1 день VCL-логика, схема инвалидации
Реализация 1–2 дня Рабочий сервис в Fastly
Тестирование 1 день Отчёт о производительности
Деплой 0.5 дня CDN включён на продакшене

Как работает тегированная инвалидация (Surrogate-Key)?

Это главное преимущество Fastly. Вы можете присвоить каждой странице или объекту один или несколько тегов (ключей). При обновлении контента отправляете запрос на инвалидацию только по этим тегам — кеш очищается мгновенно без необходимости Purge All.

Пример на Laravel:

// Laravel: добавить Surrogate-Key заголовок в ответ
public function show(Product $product): Response
{
    $response = response()->view('products.show', compact('product'));

    // Теги для этой страницы
    $surrogateKeys = [
        "product:{$product->id}",
        "category:{$product->category_id}",
        "brand:{$product->brand_id}",
    ];

    return $response->header(
        'Surrogate-Key',
        implode(' ', $surrogateKeys)
    );
}

// При обновлении товара — инвалидировать только связанные страницы
class ProductObserver
{
    public function saved(Product $product): void
    {
        Http::withHeaders([
            'Fastly-Key' => config('services.fastly.api_key'),
        ])->post(
            "https://api.fastly.com/service/{$serviceId}/purge/product:{$product->id}"
        );
    }
}
Детали реализацииОбратите внимание, что API-ключ Fastly должен храниться в безопасном хранилище. Рекомендуем использовать Laravel Vault или env-переменные.

VCL — кастомная логика кеширования

Fastly выполняет VCL на каждом запросе. Это мощнее Workers для сетевых операций. Вот типовой набор правил, которые мы используем:

// Custom VCL: vcl_recv — обработка входящего запроса
sub vcl_recv {
    // Убрать маркетинговые параметры из cache key
    set req.url = regsubreplace(req.url, "\?(.*&)?(utm_source|utm_medium|utm_campaign|fbclid|gclid)=[^&]*(&|$)", "?" );
    set req.url = regsub(req.url, "\?$", "");

    // Не кешировать авторизованных пользователей
    if (req.http.Cookie ~ "laravel_session") {
        return(pass);
    }

    // Не кешировать /admin/ и /api/
    if (req.url ~ "^/(admin|area51|api)/") {
        return(pass);
    }

    // Нормализация Accept-Encoding
    if (req.http.Accept-Encoding ~ "br") {
        set req.http.Accept-Encoding = "br";
    } elsif (req.http.Accept-Encoding ~ "gzip") {
        set req.http.Accept-Encoding = "gzip";
    } else {
        unset req.http.Accept-Encoding;
    }
}

sub vcl_backend_response {
    // Статические ассеты — год
    if (bereq.url ~ "\.(js|css|woff2|webp|avif)$") {
        set beresp.ttl = 365d;
        set beresp.http.Cache-Control = "public, max-age=31536000, immutable";
    }

    // HTML-страницы — 5 минут
    if (beresp.http.Content-Type ~ "text/html") {
        set beresp.ttl = 5m;
        set beresp.grace = 1h; // stale-while-revalidate
    }
}

sub vcl_deliver {
    // Отладочный заголовок
    if (obj.hits > 0) {
        set resp.http.X-Cache = "HIT";
        set resp.http.X-Cache-Hits = obj.hits;
    } else {
        set resp.http.X-Cache = "MISS";
    }
}
Пояснение к VCLОбратите внимание: в vcl_recv мы нормализуем Accept-Encoding, чтобы избежать дублирования кеша для разных кодировок. Это повышает HIT-ratio до 95%.

Подключение через Terraform

Fastly управляется полностью через API или Terraform-провайдер. Ниже пример конфигурации с бэкендом, gzip и логированием:

terraform {
  required_providers {
    fastly = {
      source = "fastly/fastly"
      version = "~> 5.0"
    }
  }
}

resource "fastly_service_vcl" "main" {
  name = "example-production"

  domain {
    name = "example.ru"
  }

  backend {
    address = "origin.example.ru"
    name = "origin"
    port = 443
    use_ssl = true
    ssl_cert_hostname = "origin.example.ru"
    ssl_sni_hostname = "origin.example.ru"
    connect_timeout = 5000
    between_bytes_timeout = 30000
    first_byte_timeout = 30000
  }

  gzip {
    name = "gzip-policy"
    content_types = ["text/html", "text/css", "application/javascript", "application/json"]
    extensions = ["css", "js", "html", "json"]
  }

  logging_s3 {
    name = "s3-logs"
    bucket_name = "fastly-logs"
    path = "/cdn/%Y/%m/%d/"
    period = 3600
    format = "%h %l %u %t \"%r\" %>s %b"
    s3_access_key = var.aws_access_key
    s3_secret_key = var.aws_secret_key
  }

  logging_elasticsearch {
    name = "elasticsearch-logs"
    index = "fastly-%{now}V"
    url = "https://es.example.ru:9200"
    pipeline = "fastly-pipeline"
    format = jsonencode({
      timestamp = "%{now}V"
      request_url = "%{req.url}V"
      status = "%{resp.status}V"
      cache_status = "%{resp.http.X-Cache}V"
      country = "%{client.geo.country_code}V"
      duration_ms = "%D"
    })
  }

  force_destroy = true
}

Мгновенная публикация контента

При публикации статьи или товара достаточно вызвать API, чтобы инвалидировать только затронутые страницы:

class ArticlePublishedListener
{
    public function handle(ArticlePublished $event): void
    {
        $article = $event->article;
        Http::withHeaders(['Fastly-Key' => config('services.fastly.api_key')])
            ->post("https://api.fastly.com/service/{$serviceId}/purge", [
                'urls' => [
                    "https://example.ru/blog/{$article->slug}",
                    "https://example.ru/blog/",
                    "https://example.ru/",
                ]
            ]);
    }
}

Что входит в настройку Fastly CDN

  • Аудит текущей архитектуры и трафика
  • Разработка VCL-логики кэширования под ваш проект
  • Настройка тегированной инвалидации (Surrogate-Key)
  • Интеграция с backend (Laravel, Next.js, Django и др.)
  • Настройка мониторинга и логов (S3, Elasticsearch, Kafka)
  • Документация и обучение команды
  • Пост-релизная поддержка в течение 2 недель

После настройки время инвалидации составляет менее 150 мс, HIT-ratio превышает 95%, а нагрузка на бэкенд снижается на 80%. Для одного из проектов ежемесячные расходы на CDN снизились с $4,500 до $1,200, а скорость загрузки страниц улучшилась на 40%. Как указано в документации Fastly, инвалидация кеша происходит менее чем за 150 мс.

Сроки и стоимость

Базовая настройка с VCL и тегированной инвалидацией занимает 2–3 дня. Для сложных проектов с кастомными правилами — до 5 дней. Стоимость рассчитывается индивидуально после аудита. Получите консультацию по настройке Fastly CDN — напишите нам.

Типичные ошибки при настройке Fastly

  • Не настроена нормализация Accept-Encoding — разные версии URL попадают в кеш, снижая HIT-ratio.
  • Отсутствует обработка Cookies — кешируются страницы с сессиями, что приводит к конфликтам данных.
  • Слишком длинный TTL для HTML без grace-периода — при сбое origin пользователи видят ошибку.
  • Не используются Surrogate-Key — инвалидация происходит по всему сайту, а не точечно.

Наши инженеры имеют 5+ лет опыта работы с Fastly и сертификаты по VCL. Мы гарантируем, что после настройки ваш сайт будет работать быстро и отказоустойчиво. Закажите аудит текущей CDN-архитектуры — и мы предложим оптимальное решение.

Наши компетенции:

Последние работы

  • Разработка сайта компании B2B ADVANCE
    Разработка сайта компании B2B ADVANCE
    1542
  • Разработка веб-приложения для компании FEEDME
    Разработка веб-приложения для компании FEEDME
    1393
  • Разработка веб-сайта для компании БЕЛФИНГРУПП
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    1081
  • Разработка интернет магазина для компании FURNORO
    Разработка интернет магазина для компании FURNORO
    1368
  • Разработка веб-приложения для компании Enviok
    Разработка веб-приложения для компании Enviok
    1139
  • Разработка веб-сайта для компании ФИКСПЕР
    Разработка веб-сайта для компании ФИКСПЕР
    1060