CDN: Полное руководство по ускорению сайтов через глобальные сети доставки контента

Сети доставки контента (CDN) стали основой современной веб-инфраструктуры, обслуживая более 70% глобального интернет-трафика. Для технических команд, управляющих высоконагруженными проектами, нацеленными на аудиторию США и Европы, понимание архитектуры CDN на сетевом уровне критично для оптимизации производительности, снижения затрат и масштабируемости.

Это руководство предоставляет всесторонний технический анализ механизмов CDN, от размещения edge-узлов до стратегий инвалидации кеша, с практическими примерами конфигурации для продакшн-окружений.

Как работает CDN на уровне сетевых узлов

Разрешение DNS и маршрутизация запросов

Когда пользователь запрашивает контент, CDN перехватывает DNS-запрос до того, как он достигнет исходного сервера. DNS-инфраструктура CDN использует базы данных GeoIP и измерения задержки для маршрутизации запроса к ближайшему edge-узлу.

Поток разрешения DNS:

Запрос пользователя → CDN DNS (Anycast) → Поиск GeoIP → Проверка задержки → Выбор Edge-узла → Кешированный ответ или запрос к источнику

Anycast-маршрутизация гарантирует, что DNS-запросы автоматически направляются к ближайшему DNS-резолверу, сокращая время поиска DNS с 50-200мс до 5-20мс в среднем.

Техническая реализация:

Провайдеры CDN поддерживают распределённую DNS-инфраструктуру, используя BGP Anycast. Каждое edge-местоположение анонсирует тот же IP-адрес (например, Cloudflare использует 1.1.1.1 для DNS), и BGP маршрутизирует запросы к географически ближайшему резолверу на основе длины AS-path и задержки.

Архитектура Edge-узлов

Edge-узлы — это распределённые серверы, размещённые в точках обмена интернет-трафиком (IXP) и крупных дата-центрах по всему миру. Каждый узел состоит из:

  • Слой кеша: Хранилище в памяти (Redis/Memcached) и на диске для часто запрашиваемого контента
  • Балансировщик нагрузки: Распределяет запросы между несколькими серверами кеша в узле
  • Пул соединений с источником: Поддерживает постоянные HTTP/2 соединения с исходными серверами
  • Защита от DDoS: Фильтрация уровня 3/4/7 и ограничение скорости

Типичная конфигурация Edge-узла:

  • CPU: 8-16 ядер (Intel Xeon или AMD EPYC)
  • RAM: 32-64GB (для кеширования в памяти)
  • Хранилище: 500GB-2TB SSD (для дискового кеша)
  • Сеть: 10Gbps-100Gbps подключение к вышестоящим провайдерам

Оптимизация коэффициента попаданий в кеш

Коэффициент попаданий в кеш напрямую влияет на затраты CDN и нагрузку на источник. Коэффициент попаданий 95%+ означает, что 95% запросов обслуживаются из edge-узлов без обращения к источнику.

Структура ключа кеша:

Ключи кеша CDN обычно включают:

  • Полный путь URL
  • Параметры строки запроса (настраиваемые)
  • Заголовки запроса (заголовок Vary, Accept-Encoding и т.д.)
  • Тип устройства (мобильное/десктопное), если используется кеширование с учётом устройства

Механизмы кеширования на границе сети

Заголовки Cache-Control и стратегии TTL

Исходные серверы управляют поведением кеширования CDN через HTTP-заголовки:

Cache-Control: public, max-age=3600, s-maxage=86400
ETag: "33a64df551425fcc55e4d42a148795d9f25f89d4"

Общие директивы Cache-Control:

  • public: Контент может кешироваться CDN и браузерами
  • private: Разрешено только кеширование браузером, не CDN
  • max-age=3600: TTL кеша браузера (1 час)
  • s-maxage=86400: TTL кеша CDN (24 часа)
  • must-revalidate: Перепроверять с источником при истечении срока
  • no-cache: Всегда перепроверять перед обслуживанием
  • no-store: Никогда не кешировать

Пример конфигурации кеша Nginx

Для самодельного CDN или оптимизации исходного сервера:

proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=cdn_cache:10m max_size=10g inactive=60m use_temp_path=off;

server {
    listen 80;
    server_name cdn.example.com;

    proxy_cache cdn_cache;
    proxy_cache_valid 200 302 10m;
    proxy_cache_valid 404 1m;
    proxy_cache_use_stale error timeout updating http_500 http_502 http_503 http_504;
    proxy_cache_background_update on;
    proxy_cache_lock on;

    location / {
        proxy_pass http://origin-server;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        
        # Заголовки кеша
        add_header X-Cache-Status $upstream_cache_status;
        add_header Cache-Control "public, max-age=3600";
    }
}

Стратегии инвалидации кеша

Методы очистки:

  1. Очистка по URL: Инвалидировать конкретные URL

    curl -X PURGE https://cdn.example.com/path/to/file.jpg
    
  2. Очистка по тегам: Инвалидировать весь контент, помеченный определённым тегом

    curl -X PURGE https://cdn.example.com -H "Cache-Tag: product-123"
    
  3. Очистка по маске: Инвалидировать целые директории

    curl -X PURGE "https://cdn.example.com/images/*"
    

Автоматическая инвалидация:

Интегрируйте инвалидацию кеша в ваш пайплайн развёртывания:

# .github/workflows/deploy.yml
- name: Purge CDN Cache
  run: |
    curl -X POST "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/purge_cache" \
      -H "Authorization: Bearer $CF_API_TOKEN" \
      -H "Content-Type: application/json" \
      --data '{"purge_everything":true}'

Геомаршрутизация и географическая оптимизация

Интеллектуальная маршрутизация запросов

Геомаршрутизация направляет пользователей к ближайшему edge-узлу на основе:

  • Географической близости: Базы данных геолокации IP (MaxMind GeoIP2, IP2Location)
  • Сетевой близости: Анализ AS-path и таблицы маршрутизации BGP
  • Измерения задержки: Активное зондирование для определения наименьшего RTT
  • Балансировки нагрузки: Распределение трафика между узлами для предотвращения перегрузки

Матрица решений геомаршрутизации:

ФакторВесМетод
Географическое расстояние40%Геолокация IP (MaxMind)
Сетевая задержка35%Активное измерение RTT
Нагрузка сервера15%Мониторинг ёмкости в реальном времени
Оптимизация затрат10%Стоимость трафика на регион

Региональная оптимизация

Разные регионы требуют разных стратегий кеширования:

Восточное побережье США:

  • Основные edge-узлы: Нью-Йорк (NYC), Эшберн (IAD)
  • Резервный: Майами (MIA) для трафика Латинской Америки
  • Средняя задержка: 10-30мс в пределах региона

Западное побережье США:

  • Основные edge-узлы: Лос-Анджелес (LAX), Сан-Франциско (SFO)
  • Резервный: Сиэтл (SEA) для Тихоокеанского Северо-Запада
  • Средняя задержка: 15-40мс в пределах региона

Европа:

  • Основные edge-узлы: Амстердам (AMS), Франкфурт (FRA), Лондон (LHR)
  • Вторичные: Париж (CDG), Стокгольм (ARN), Мадрид (MAD)
  • Средняя задержка: 5-25мс в пределах ЕС

Сравнение Edge-узлов CDN:

ПровайдерГлобальные узлыУзлы СШАУзлы ЕСЗадержка (США)Задержка (ЕС)
Cloudflare300+50+80+15-40мс5-20мс
Fastly100+20+25+10-30мс8-25мс
Akamai4100+800+600+8-25мс5-15мс
AWS CloudFront450+100+50+20-50мс15-35мс

Умная маршрутизация и динамическая оптимизация

Анализ трафика в реальном времени

Умная маршрутизация непрерывно мониторит:

  • Здоровье исходного сервера: HTTP коды состояния, время отклика
  • Сетевые условия: Потеря пакетов, джиттер, доступная пропускная способность
  • Ёмкость edge-узла: CPU, память, дисковый I/O, использование пула соединений

Алгоритм маршрутизации:

def select_edge_node(user_location, requested_content):
    edge_nodes = get_available_nodes(user_location)
    
    scores = {}
    for node in edge_nodes:
        latency = measure_rtt(node)
        load = get_node_load(node)
        cache_hit = check_cache(node, requested_content)
        cost = get_bandwidth_cost(node.region)
        
        score = (
            (1 / latency) * 0.4 +
            (1 / (load + 1)) * 0.3 +
            cache_hit * 0.2 +
            (1 / cost) * 0.1
        )
        scores[node.id] = score
    
    return max(scores, key=scores.get)

Отказоустойчивость и проверки здоровья

CDN автоматически перенаправляет трафик, когда:

  • Edge-узел становится недоступным (HTTP 502/503/504)
  • Исходный сервер не проходит проверки здоровья
  • Сетевой путь деградирует (потеря пакетов > 1%, задержка > 500мс)

Конфигурация проверки здоровья (Cloudflare):

// Скрипт Workers для пользовательских проверок здоровья
addEventListener('fetch', event => {
  event.respondWith(handleRequest(event.request))
})

async function handleRequest(request) {
  const origin = 'https://origin.example.com'
  const healthCheck = await fetch(`${origin}/health`, {
    method: 'GET',
    headers: { 'User-Agent': 'CDN-Health-Check' }
  })
  
  if (!healthCheck.ok) {
    return new Response('Origin Unhealthy', { status: 503 })
  }
  
  return fetch(origin + new URL(request.url).pathname)
}

Балансировка нагрузки на основе DNS

DNS Round-Robin и взвешенная маршрутизация

Традиционный DNS round-robin распределяет запросы между несколькими IP-адресами:

example.com.    300  IN  A  192.0.2.1
example.com.    300  IN  A  192.0.2.2
example.com.    300  IN  A  192.0.2.3

Взвешенные DNS-записи:

Некоторые DNS-провайдеры поддерживают взвешенные ответы на основе ёмкости сервера:

; Основной сервер (70% трафика)
cdn.example.com.  300  IN  A  192.0.2.1

; Вторичный сервер (20% трафика)
cdn.example.com.  300  IN  A  192.0.2.2

; Третичный сервер (10% трафика)
cdn.example.com.  300  IN  A  192.0.2.3

Географический DNS (GeoDNS)

GeoDNS возвращает разные IP-адреса на основе географического местоположения запрашивающего:

Конфигурация PowerDNS GeoDNS:

# geodns.yml
zones:
  cdn.example.com:
    ttl: 300
    records:
      - name: '@'
        type: A
        geo:
          - continent: NA
            country: US
            region: east
            value: 192.0.2.10
          - continent: NA
            country: US
            region: west
            value: 192.0.2.11
          - continent: EU
            value: 192.0.2.20
          - default: 192.0.2.1

Оптимизация времени отклика DNS:

  • DNS TTL: 300 секунд (5 минут) для баланса между эффективностью кеша и скоростью отказоустойчивости
  • Предзагрузка DNS: Предварительное разрешение доменов CDN в HTML head
  • HTTP/3 с DNS over HTTPS (DoH): Снижает накладные расходы поиска DNS

Выбор CDN для высоконагруженных проектов

Метрики производительности

При оценке CDN измеряйте:

  1. Time to First Byte (TTFB): Цель < 100мс от edge-узлов
  2. Коэффициент попаданий в кеш: Должен быть 90%+ для статического контента
  3. Коэффициент попаданий Origin Shield: 50-70% для многоуровневых архитектур CDN
  4. Эффективность пропускной способности: Коэффициент сжатия и мультиплексирование HTTP/2
  5. Ёмкость смягчения DDoS: 1Tbps+ для корпоративных развёртываний

Сравнение провайдеров CDN

ФункцияCloudflareFastlyAkamaiAWS CloudFront
Бесплатный тарифДа (безлимит)НетНетДа (50GB/месяц)
Pay-as-you-go$20/месяц$50/месяцEnterprise$0.085/GB
Защита от DDoSВключенаВключенаВключенаShield Standard
WAFВключен (Pro)ВключенВключенДополнительная стоимость
Оптимизация изображенийВключенаДополнительноВключенаLambda@Edge
ВидеостримингStream (дополнительно)ВключенВключенCloudFront
Пользовательская логикаWorkersVCLEdgeWorkersLambda@Edge
Аналитика в реальном времениБазоваяПродвинутаяПродвинутаяCloudWatch
Лимиты APIВысокиеОчень высокиеEnterpriseВысокие

Рекомендации по вариантам использования

E-commerce сайты:

  • Рекомендация: Fastly или Akamai
  • Обоснование: Инвалидация кеша в реальном времени, продвинутый WAF, соответствие PCI-DSS
  • Стоимость: $200-2000/месяц за 1TB трафика

Медиа/Издательства:

  • Рекомендация: Cloudflare или CloudFront
  • Обоснование: Оптимизация изображений, видеостриминг, экономически эффективно для больших объёмов
  • Стоимость: $20-500/месяц за 10TB трафика

SaaS приложения:

  • Рекомендация: Cloudflare Workers или Fastly Compute
  • Обоснование: Пользовательская логика на границе, ускорение API, A/B тестирование
  • Стоимость: $20-300/месяц + затраты на вычисления

Высокобезопасные проекты:

  • Рекомендация: Akamai или Fastly
  • Обоснование: Продвинутое смягчение DDoS, управление ботами, zero-trust сеть
  • Стоимость: $1000-10000/месяц

Практические примеры конфигурации

Настройка CDN Cloudflare

1. Конфигурация DNS:

# Добавить CNAME запись, указывающую на источник
cdn.example.com → origin.example.com (прокси включён)

2. Page Rules для управления кешем:

  • Паттерн: *example.com/images/*

    • Уровень кеша: Кешировать всё
    • TTL кеша на границе: 1 месяц
  • Паттерн: *example.com/api/*

    • Уровень кеша: Обход
    • Уровень безопасности: Высокий

3. Скрипт Workers для динамического кеширования:

addEventListener('fetch', event => {
  event.respondWith(handleRequest(event.request))
})

async function handleRequest(request) {
  const url = new URL(request.url)
  
  // Агрессивно кешировать статические ресурсы
  if (url.pathname.startsWith('/static/')) {
    const cache = caches.default
    let response = await cache.match(request)
    
    if (!response) {
      response = await fetch(request)
      response = new Response(response.body, {
        ...response,
        headers: {
          ...response.headers,
          'Cache-Control': 'public, max-age=31536000'
        }
      })
      event.waitUntil(cache.put(request, response.clone()))
    }
    
    return response
  }
  
  // Пропуск для API-запросов
  return fetch(request)
}

4. API очистки кеша:

# Очистить конкретные URL
curl -X POST "https://api.cloudflare.com/client/v4/zones/ZONE_ID/purge_cache" \
  -H "Authorization: Bearer API_TOKEN" \
  -H "Content-Type: application/json" \
  --data '{
    "files": [
      "https://example.com/image.jpg",
      "https://example.com/style.css"
    ]
  }'

# Очистить по тегу
curl -X POST "https://api.cloudflare.com/client/v4/zones/ZONE_ID/purge_cache" \
  -H "Authorization: Bearer API_TOKEN" \
  -H "Content-Type: application/json" \
  --data '{"tags": ["product-123"]}'

Конфигурация Fastly VCL

Edge Dictionary для TTL кеша:

table cache_ttl {
  "/images/*": "31536000",  # 1 год
  "/css/*": "86400",         # 1 день
  "/js/*": "86400",          # 1 день
  "/api/*": "0"              # без кеша
}

Фрагмент VCL для управления кешем:

sub vcl_recv {
  # Установить TTL кеша на основе пути
  if (req.url.path ~ "^/images/") {
    set req.http.Cache-Control = "public, max-age=31536000";
  }
  
  # Обойти кеш для API-запросов
  if (req.url.path ~ "^/api/") {
    return(pass);
  }
  
  # Включить HTTP/2
  set req.http.Connection = "";
}

sub vcl_fetch {
  # Кешировать успешные ответы
  if (beresp.status == 200 || beresp.status == 301 || beresp.status == 404) {
    set beresp.ttl = 3600s;
    set beresp.http.Cache-Control = "public, max-age=3600";
  }
}

sub vcl_deliver {
  # Добавить заголовок статуса кеша
  if (obj.hits > 0) {
    set resp.http.X-Cache = "HIT";
  } else {
    set resp.http.X-Cache = "MISS";
  }
  set resp.http.X-Cache-Hits = obj.hits;
}

Конфигурация свойства Akamai

Пример Akamai EdgeWorkers (Оптимизация изображений):

export async function onClientRequest(request) {
  // Изменять размер изображений на лету
  const url = new URL(request.url)
  const width = url.searchParams.get('w')
  const height = url.searchParams.get('h')
  
  if (width || height) {
    url.searchParams.set('imageTransform', `w_${width || 'auto'},h_${height || 'auto'},c_fill`)
    request.url = url.toString()
  }
}

export async function onClientResponse(request, response) {
  // Добавить заголовки кеша
  response.setHeader('Cache-Control', 'public, max-age=86400')
  response.setHeader('CDN-Cache-Status', response.getHeader('X-Cache'))
}

Конфигурация исходного сервера Nginx CDN

Оптимизированная настройка исходного сервера:

# Включить HTTP/2 и сжатие
http {
    http2 on;
    gzip on;
    gzip_vary on;
    gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
    gzip_min_length 1000;
    
    # Кешировать статические файлы
    map $uri $static_file {
        ~*\.(jpg|jpeg|png|gif|ico|css|js|woff|woff2|ttf|svg)$ 1;
        default 0;
    }
    
    server {
        listen 443 ssl http2;
        server_name origin.example.com;
        
        # Конфигурация SSL
        ssl_certificate /etc/ssl/certs/example.com.crt;
        ssl_certificate_key /etc/ssl/private/example.com.key;
        ssl_protocols TLSv1.2 TLSv1.3;
        ssl_ciphers HIGH:!aNULL:!MD5;
        
        # Заголовки безопасности
        add_header X-Frame-Options "SAMEORIGIN" always;
        add_header X-Content-Type-Options "nosniff" always;
        add_header X-XSS-Protection "1; mode=block" always;
        
        # Заголовки для CDN
        location / {
            # Доверять диапазонам IP CDN
            set_real_ip_from 192.0.2.0/24;
            set_real_ip_from 203.0.113.0/24;
            real_ip_header CF-Connecting-IP;  # Cloudflare
            # real_ip_header Fastly-Client-IP;  # Fastly
            
            # Заголовки кеша для статических файлов
            if ($static_file) {
                add_header Cache-Control "public, max-age=31536000, immutable";
                add_header ETag $upstream_http_etag;
            }
            
            # API-эндпоинты - без кеша
            if ($uri ~ ^/api/) {
                add_header Cache-Control "no-cache, no-store, must-revalidate";
                add_header Pragma "no-cache";
                add_header Expires "0";
            }
            
            proxy_pass http://backend;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
        }
    }
}

Стратегии оптимизации производительности

Поддержка HTTP/2 и HTTP/3

Современные CDN поддерживают мультиплексирование, сжатие заголовков и server push:

Преимущества HTTP/2:

  • Мультиплексирование: Множественные запросы через одно TCP-соединение
  • Сжатие заголовков: HPACK снижает накладные расходы заголовков на 60-80%
  • Server push: Предзагрузка критических ресурсов

Преимущества HTTP/3 (QUIC):

  • На основе UDP: Более быстрое установление соединения (0-RTT)
  • Встроенное шифрование: TLS 1.3 в протоколе QUIC
  • Миграция соединения: Бесшовная смена IP-адресов

Оптимизация изображений

Конвертация в WebP:

# Конвертировать изображения в WebP на лету
location ~* \.(jpg|jpeg|png)$ {
    add_header Vary Accept;
    
    set $webp_accept "";
    if ($http_accept ~* "webp") {
        set $webp_accept "webp";
    }
    
    try_files $uri$webp_accept $uri =404;
}

Адаптивные изображения:

<picture>
  <source srcset="image.webp" type="image/webp">
  <source srcset="image.avif" type="image/avif">
  <img src="image.jpg" alt="Описание">
</picture>

Сжатие и минификация

Brotli vs Gzip:

АлгоритмКоэффициент сжатияИспользование CPUПоддержка браузерами
Gzip~70%НизкоеУниверсальная
Brotli~85%СреднееСовременные браузеры

Включить Brotli в Nginx:

brotli on;
brotli_comp_level 6;
brotli_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;

Мониторинг и аналитика

Ключевые показатели производительности

Метрики CDN для мониторинга:

  1. Коэффициент попаданий в кеш: Цель 90%+

    # API аналитики Cloudflare
    curl "https://api.cloudflare.com/client/v4/zones/ZONE_ID/analytics/dashboard" \
      -H "Authorization: Bearer TOKEN"
    
  2. Экономия пропускной способности: Рассчитать снижение затрат

    Сэкономленная пропускная способность = Всего запросов × (1 - Коэффициент попаданий в кеш) × Средний размер файла
    
  3. Снижение нагрузки на источник: Запросов в секунду к источнику

    RPS источника = Всего RPS × (1 - Коэффициент попаданий в кеш)
    
  4. Географическое распределение: Трафик по регионам

    • США: 40-50%
    • ЕС: 25-35%
    • Азия: 15-25%
    • Другие: 5-10%

Панель мониторинга в реальном времени

Аналитика Cloudflare Workers:

addEventListener('fetch', event => {
  event.respondWith(handleRequest(event.request))
})

async function handleRequest(request) {
  const start = Date.now()
  const response = await fetch(request)
  const duration = Date.now() - start
  
  // Логировать метрики в сервис аналитики
  await fetch('https://analytics.example.com/metrics', {
    method: 'POST',
    body: JSON.stringify({
      url: request.url,
      duration: duration,
      status: response.status,
      cache: response.headers.get('CF-Cache-Status')
    })
  })
  
  return response
}

Оптимизация затрат

Сравнение цен на пропускную способность

Провайдер CDNПервые 10TBСледующие 40TBСледующие 100TB150TB+
Cloudflare$0$0$0$0
Fastly$0.12/GB$0.08/GB$0.04/GB$0.02/GB
AkamaiИндивидуальноИндивидуальноИндивидуальноИндивидуально
AWS CloudFront$0.085/GB$0.080/GB$0.060/GB$0.040/GB
Google Cloud CDN$0.08/GB$0.06/GB$0.04/GB$0.02/GB

Пример расчёта затрат:

Для 50TB/месяц:

  • Cloudflare: $20/месяц (план Pro)
  • Fastly: ~$600/месяц (50,000 GB × $0.12)
  • CloudFront: ~$4,250/месяц (50,000 GB × $0.085)

Снижение затрат CDN

  1. Увеличить коэффициент попаданий в кеш:

    • Увеличить TTL кеша для статических ресурсов
    • Использовать теги кеша для эффективной инвалидации
    • Реализовать stale-while-revalidate
  2. Оптимизировать размер контента:

    • Включить сжатие (Brotli/Gzip)
    • Конвертировать изображения в WebP/AVIF
    • Минифицировать CSS/JS
  3. Региональное кеширование:

    • Использовать региональные эндпоинты для регионов с высоким трафиком
    • Реализовать origin shield для многоуровневого кеширования
  4. Лимиты пропускной способности:

    • Настроить оповещения для неожиданных всплесков трафика
    • Реализовать ограничение скорости для предотвращения злоупотреблений

Соображения безопасности

Защита от DDoS

CDN предоставляют смягчение DDoS уровня 3/4/7:

Уровень 3/4 (Сеть/Транспорт):

  • Защита от SYN-флуда: Ограничение скорости TCP-соединений
  • Защита от UDP-флуда: Отбрасывание несущественного UDP-трафика
  • Защита от ICMP-флуда: Ограничение скорости ICMP-пакетов

Уровень 7 (Приложение):

  • Защита от HTTP-флуда: Проверка подозрительных запросов
  • Защита от Slowloris: Таймаут медленных соединений
  • Истощение SSL/TLS: Ограничение SSL-рукопожатий на IP

Web Application Firewall (WAF)

Пример правил WAF Cloudflare:

// Блокировать попытки SQL-инъекций
(http.request.uri.query contains "union select") or
(http.request.uri.query contains "drop table") or
(http.request.body contains "or 1=1")

// Ограничить скорость по стране
(ip.geoip.country eq "CN" and rate(100) > 10)

Конфигурация SSL/TLS

Только TLS 1.3:

ssl_protocols TLSv1.3;
ssl_ciphers TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256;
ssl_prefer_server_ciphers off;  # TLS 1.3 выбирает шифр

OCSP Stapling:

ssl_stapling on;
ssl_stapling_verify on;
ssl_trusted_certificate /etc/ssl/certs/ca-certificates.crt;
resolver 8.8.8.8 8.8.4.4 valid=300s;
resolver_timeout 5s;

FAQ

В чём разница между CDN и традиционным веб-хостингом?

Традиционный веб-хостинг обслуживает контент с одного исходного сервера, что приводит к более высокой задержке для географически удалённых пользователей. CDN распределяет контент по множеству edge-узлов по всему миру, обслуживая контент из ближайшего к каждому пользователю местоположения, снижая задержку на 50-80% в среднем.

Как CDN улучшает производительность сайта?

CDN улучшает производительность через:

  1. Географическую близость: Контент обслуживается из близлежащих edge-узлов (5-50мс против 100-300мс)
  2. Кеширование: Статические ресурсы кешируются на границе, снижая нагрузку на источник на 90%+
  3. Сжатие: Автоматическое сжатие Gzip/Brotli, снижающее размеры файлов на 60-80%
  4. Мультиплексирование HTTP/2: Множественные запросы через одно соединение
  5. Защита от DDoS: Фильтрация вредоносного трафика до достижения источника

Какой CDN лучше всего для высоконагруженных сайтов?

Для высоконагруженных сайтов (>100TB/месяц):

  • Экономически эффективный: Cloudflare (безлимитная пропускная способность на платных планах)
  • Производительность: Akamai (крупнейшая сеть, наименьшая задержка)
  • Гибкость: Fastly (VCL для пользовательской логики, очистка в реальном времени)
  • Интеграция с облаком: AWS CloudFront (бесшовная интеграция с сервисами AWS)

Как настроить инвалидацию кеша?

Методы инвалидации кеша:

  1. Очистка по URL: Мгновенная инвалидация конкретных URL
  2. Очистка по тегам: Инвалидировать весь контент с определёнными тегами
  3. Очистка по маске: Инвалидировать целые деревья директорий
  4. Истечение по времени: Автоматическое истечение через заголовки Cache-Control

Что такое edge computing в контексте CDN?

Edge computing позволяет запускать пользовательский код на edge-узлах CDN, обеспечивая:

  • A/B тестирование и feature flags
  • Персонализацию и динамический контент
  • Маршрутизацию и агрегацию API-запросов
  • Аналитику и логирование в реальном времени
  • Обнаружение и смягчение ботов

Примеры: Cloudflare Workers, Fastly Compute@Edge, AWS Lambda@Edge.

Сколько стоит CDN для 10TB трафика в месяц?

Затраты CDN для 10TB/месяц:

  • Cloudflare: $20/месяц (план Pro, безлимитная пропускная способность)
  • Fastly: ~$1,200/месяц ($0.12/GB)
  • AWS CloudFront: ~$850/месяц ($0.085/GB)
  • Akamai: Индивидуальное ценообразование (обычно $500-2000/месяц)

Примечание: Цены варьируются в зависимости от географического распределения, дополнительных функций (WAF, оптимизация изображений) и корпоративных контрактов.

Могу ли я использовать несколько CDN одновременно?

Да, стратегии multi-CDN предоставляют:

  • Избыточность: Отказоустойчивость, если один CDN выходит из строя
  • Оптимизация затрат: Маршрутизация трафика к самому дешёвому CDN на регион
  • Оптимизация производительности: Маршрутизация к CDN с наименьшей задержкой на пользователя
  • A/B тестирование: Сравнение производительности CDN

Реализация требует логики маршрутизации на основе DNS или на стороне клиента.

Как CDN обрабатывает динамический контент?

Динамический контент (API, персонализированные страницы) может быть:

  1. Обойдён: Всегда получается из источника (без кеширования)
  2. Кеширован на границе: Кешируется на границе с коротким TTL (1-5 минут)
  3. Вычислен на границе: Генерируется на границе с использованием Workers/Compute
  4. Stale-while-revalidate: Обслуживать устаревший контент во время получения свежего

Лучшая практика: Использовать теги кеша для селективной инвалидации и реализовать stale-while-revalidate для лучшей производительности.

Заключение

Реализация CDN необходима для современной веб-инфраструктуры, обеспечивая улучшения производительности, снижение затрат и масштабируемость для высоконагруженных проектов. Понимание архитектуры CDN на сетевом уровне — от маршрутизации DNS до инвалидации кеша — позволяет техническим командам оптимизировать конфигурации и достигать коэффициентов попаданий в кеш 90%+.

Ключевые выводы:

  • Кеширование на границе снижает нагрузку на источник на 90%+ для статического контента
  • Геомаршрутизация снижает задержку на 50-80% для глобальной аудитории
  • Умная маршрутизация автоматически оптимизирует производительность и затраты
  • Защита от DDoS включена в большинство сервисов CDN
  • Оптимизация затрат требует балансировки коэффициента попаданий в кеш и пропускной способности

Для проектов, нацеленных на аудиторию США и Европы, Cloudflare предлагает лучший баланс производительности, функций и затрат. Для корпоративных развёртываний, требующих продвинутой кастомизации, Fastly и Akamai предоставляют больше контроля и более высокую производительность.

Готовы ускорить свой сайт с CDN?

Dior Host предлагает высокопроизводительный хостинг VPS и хостинг VDS, оптимизированные для интеграции с CDN. Наша инфраструктура разработана для соединений с исходными серверами с низкой задержкой и высокой пропускной способностью, обеспечивая оптимальную производительность CDN для ваших проектов.

Изучить наши планы VPS → | Просмотреть варианты VDS → | Поддержка интеграции CDN