Оптимальные настройки CDN для WordPress

1. Выбор протокола передачи данных: HTTP/2 vs HTTP/3 для WordPress
Для современных сайтов на WordPress критически важно использовать HTTP/2 или HTTP/3. HTTP/2 позволяет мультиплексировать запросы, что снижает задержки при загрузке нескольких файлов (CSS, JS, шрифты) одновременно. Конкретные параметры: включите HTTP/2 на уровне CDN — это дает прирост скорости загрузки первой страницы на 15-30% в зависимости от количества запросов.
HTTP/3 (на базе QUIC) использует протокол UDP вместо TCP, что значительно уменьшает время установки соединения (дополнительная экономия 100-300 мс на первый запрос). Для WordPress это особенно актуально для мобильных пользователей с нестабильным соединением. Выбирайте CDN, который поддерживает HTTP/3 на всех edge-серверах: Cloudflare (включен по умолчанию), KeyCDN (требует ручного включения в настройках), BunnyCDN (автоматически).
Практический шаг: в панели CDN найдите раздел "Protocol" и установите значение "HTTPS only" или "Redirect to HTTPS". Это гарантирует, что все запросы будут обрабатываться через защищенные протоколы, поддерживающие H2 и H3. Для WordPress также обязательно включите поддержку ALPN (Application-Layer Protocol Negotiation) на сервере источника.
- HTTP/2: мультиплексирование, сжатие заголовков HPACK, server push (не рекомендуется для WordPress — вызывает проблемы с кэшированием).
- HTTP/3: нулевое время для первоначального рукопожатия (0-RTT), устойчивость к потере пакетов (не блокирует остальные запросы).
- Требования: TLS 1.3 обязателен для HTTP/3; сервер источника должен поддерживать ALPN. Проверьте через SSL Labs или test.cdn.com.
- Разница в кэшировании: если ваш CDN не поддерживает HTTP/3, настройте строгий HTTPS только с H2 — это стандарт для 98% современных браузеров.
2. Фильтрация и кэширование статических ресурсов: точные заголовки Cache-Control
Для WordPress критично правильно настроить TTL (Time To Live) для статики: изображений, CSS, JS. Установите для типов файлов .jpg, .png, .webp, .svg, .css, .js значение Cache-Control: max-age=31536000 (1 год). Это уменьшает количество обращений к серверу источника на 60-80% для повторных визитов.
Важно: для динамических страниц (категории, отдельные записи) используйте разный подход. Для страниц с HTML-кэшированием (например, через плагин WP Rocket или Litespeed Cache) установите max-age=3600 секунд (1 час) с проверкой через ETag или Last-Modified. Конкретная настройка: в CDN добавьте правило для Content-Type: text/html с значением s-maxage=3600, stale-while-revalidate=86400. Это позволяет CDN отдавать устаревший кэш во время фонового обновления.
Практический пример для BunnyCDN: создайте Pull Zone, включите "Enable Logging" (для отладки), в "Cache-Control" укажите пользовательские заголовки. Для статики: "Cache-Control: public, immutable, max-age=31536000". Для HTML: "Cache-Control: public, s-maxage=3600, stale-while-revalidate=86400". В Cloudflare используйте Page Rules: для *wp-content/uploads* — Cache Level: Standard, Edge Cache TTL: 1 месяц.
- Установите разные TTL для статики (год) и HTML (час). Это предотвращает дублирование нагрузки и снижает банвдвидт источника.
- Включите "Serve stale content" (Stale-while-revalidate). Параметр: 86 400 секунд (сутки). Это гарантирует, что даже при падении источника пользователи увидят кэшированную версию.
- Отключите кэширование для wp-admin, wp-login.php, админ-панели. Конкретный заголовок: Cache-Control: no-store, must-revalidate. Исключите через регулярные выражения: /wp-admin/*, /wp-login.php, */cron*.
- Настройте Bypass Cache на Cookie: если запрос имеет cookie comment_author_*, то CDN должен пропускать запрос к источнику — иначе комментаторы увидят чужие данные.
3. Сжатие и оптимизация изображений: форматы WebP и AVIF на уровне CDN
Для WordPress изображения составляют 70-80% веса страницы. Используйте CDN для автоматического преобразования в WebP и AVIF. Настройка: в панели CDN (Cloudflare — Polish, KeyCDN — Image Processing, BunnyCDN — Optimizer) включите перекодировку с качеством 80% для WebP и 70% для AVIF. Это снижает объем изображений на 30-50% без потери визуального качества.
Техническая спецификация: AVIF поддерживает глубокий цвет (HDR) и сжатие без потерь для некоторых элементов. Однако не все браузеры его поддерживают. Поэтому настройте CDN на доставку AVIF только если заголовок Accept содержит image/avif. В Cloudflare это делается через "Image Resizing" — создайте правило: для /wp-content/uploads/ добавить параметр format=auto,quality=80. Это позволяет CDN выбирать между JPEG, WebP и AVIF в зависимости от браузера.
Практический шаг: проверьте, поддерживает ли ваш CDN "Client Hints" (DPR, Viewport-Width). Включите отправку этих заголовков с вашего WordPress-сайта (через functions.php: add_filter('wp_headers', function($headers) { $headers['Accept-CH'] = 'DPR, Viewport-Width'; return $headers; });). Это позволит CDN ресайзить изображения под конкретный экран устройства — экономия до 40% трафика.
- Форматы через CDN: AVIF (лучшее сжатие, 70% экономии), WebP (стандарт, 30-50% экономии), JPEG/PNG (база).
- Параметр качества: 80% для WebP — визуально идентично оригиналам. Для AVIF допустимо 70% — артефакты незаметны.
- Режим работы: "Lossy" (с потерями) для фотографий, "Lossless" для графики с резкими краями. Включите "Auto" — CDN сам выбирает.
- Кэш изображений: установите TTL 1 год с заголовком immutable. Это предотвращает повторную проверку.
4. Безопасность и защита источника: подмена IP, SSL/TLS и правила WAF
После подключения CDN критически настроить политики безопасности, чтобы источник оставался недоступным напрямую. Основной прием: разрешите входящие подключения к вашему хостингу только с IP-адресов CDN-провайдера. Список IP для Cloudflare — https://www.cloudflare.com/ips/, для BunnyCDN — https://bunnycdn.com/ips. Добавьте их в .htaccess или в файрвол хостинга (через WHM или plesk).
Для шифрования: используйте TLS 1.3 на стороне источника и CDN. Настройте Full Strict в Cloudflare (в разделе SSL/TLS) — это означает, что соединение между CDN и сервером тоже зашифровано, и сертификат на источнике должен быть валидным. Для BunnyCDN включите "Force SSL" и "Origin SSL" — укажите порт 443. Это предотвращает атаки типа Man-in-the-Middle на участке CDN-источник.
Правила WAF (Web Application Firewall) на CDN: отфильтруйте запросы к wp-admin из стран, где у вас нет пользователей. Например, если сайт на русском языке — заблокируйте трафик из Китая, России (если вы за пределами), Нигерии через Geo-blocking. В Cloudflare это делается в разделе Security -> WAF -> Custom Rules. Создайте правило: если страна не RU, AND запрос содержит wp-admin — Block. Это снижает нагрузку от ботов на 90%.
- Источник: используйте поддомен вида origin.yoursite.com, не привязанный к основному DNS. Настройте CDN на этот поддомен.
- Сертификаты: используйте Let's Encrypt для источника (бесплатно, обновляется автоматически). На стороне CDN используйте общий сертификат (например, Cloudflare Universal SSL).
- HSTS: включите на CDN с max-age=31536000; includeSubDomains; preload. Это форсирует HTTPS навсегда.
- Rate Limiting: установите 100 запросов в минуту на IP для wp-login.php. Это предотвращает брутфорс атаки.
5. Различия между CDN-провайдерами: материалы и спецификации сетей
Выбор CDN напрямую влияет на скорость для конкретной аудитории. Cloudflare использует Anycast-сеть — один IP-адрос обслуживает множество дата-центров, но он не всегда оптимален для регионов с низкой связностью (например, Юго-Восточная Азия). BunnyCDN строит сеть на выделенных серверах (не виртуализация) с прямыми пирингами — это дает на 20-30% меньше latency для статики по сравнению с Cloudflare Free.
KeyCDN использует комбинацию Anycast и Direct Routing, но его особенность — поддержка HTTP/2 Push (серверный пуш) для WordPress. Однако тесты показывают, что серверный пуш увеличивает TTFB (Time To First Byte) на 50-100 мс из-за конкуренции за поток. Практический совет: отключайте HTTP/2 Push в WordPress — используйте Resource Hints (preload, preconnect) вместо пуша.
StackPath (бывший Highwinds) предлагает CDN с возможностью написания собственных VCL-скриптов (аналог Varnish). Это полезно для сложных правил кэширования, например, инвалидация по тегам (WordPress — через плагин Batcache). Но для обычного пользователя достаточно встроенных правил BunnyCDN или Cloudflare. Спецификации сетей: количество точек присутствия (PoPs) — у Cloudflare 310, у BunnyCDN 114, у KeyCDN 46. Для России и СНГ лучше выбирать Cloudflare (PoPs в Москве, Санкт-Петербурге, Екатеринбурге) или BunnyCDN (только московский PoP через DataLine).
- Cloudflare Free: 310 PoPs, ограничение по полосе (100 Mbps для статики на бесплатном плане), поддержка HTTP/3, WAF базовый.
- BunnyCDN Standard: 114 PoPs, плата за трафик (от $0.01/GB), поддержка сжатия Brotli, автоматическое оптимизация изображений, no bandwidth caps.
- KeyCDN PRO: 46 PoPs, поддержка HTTP/2 Push, VCL-скрипты, акцент на производительность для динамики (Railgun).
- Quic.cloud: специализированный для WordPress (с интеграцией с Litespeed Cache), использует QUIC/HTTP3, 30+ PoPs. Высокая цена ($9/мес за 50 GB).
- StackPath: 68 PoPs, возможность VCL, поддержка Anycast, но минимальный тариф $10/мес.
6. Инвалидация кэша и работа с плагинами кэширования WordPress
При использовании CDN важно синхронизировать очистку кэша между WordPress (через плагин) и CDN. Для Cloudflare используйте официальный плагин "Cloudflare" — при публикации записи он автоматически очищает кэш для конкретной страницы через API. В настройках плагина включите "Automatic Cache Purge" и укажите URL-шаблон: /, /%postname%/. Это гарантирует, что при обновлении контента CDN не отдает старую версию.
Для BunnyCDN и KeyCDN используйте плагин "CDN Enabler" или "WP Rocket" (интеграция с API). Технический параметр: установите "Purge Delay" на 2 секунды — это время, чтобы WordPress записал данные в БД до отправки запроса на инвалидацию. Если плагин не поддерживает API — используйте правило Cache-Busting: добавьте параметр версии к файлам (wp_enqueue_style с $ver = filemtime).
Практический шаг: настройте revalidate на уровне CDN. Для BunnyCDN в разделе "Cache" поставьте галочку "Enable Cache Revalidation" — CDN будет запрашивать у источника заголовки ETag и Last-Modified. В WordPress установите плагин "Performance Lab" — он добавляет заголовки для шаблонов. Если ETag совпадает — CDN вернет 304 Not Modified, что экономит 100% трафика для повторных запросов.
Добавлено: 24.04.2026
