Медленная загрузка статики для европейских пользователей? Origin-сервер захлёбывается при пиковых нагрузках, TTFB растёт до 300+ мс, а Core Web Vitals не проходят аудит. Для проектов на Laravel, WordPress или кастомном PHP типичная проблема — задержки из-за удалённой инфраструктуры. Мы помогаем настроить KeyCDN — европейский CDN с 35+ точками присутствия (PoP), низкой задержкой и оплатой по факту. После интеграции TTFB падает до 30–50 мс, нагрузка на сервер снижается на 85%, а кеш-hit rate достигает 98% при правильных заголовках.
KeyCDN использует HTTP/2 и поддерживает WebP на лету. Мы уже подключили его для 50+ сайтов — результат стабилен. Ниже разберём типовые проблемы и процесс настройки.
Проблемы, которые решаем
- Высокий TTFB — запросы идут за тысячи километров. KeyCDN приближает контент к пользователю (PoP во Франкфурте, Амстердаме, Лондоне), сокращая задержку в 3–5 раз.
- Перегрузка origin — статические файлы (CSS, JS, изображения) отдаются с CDN, снижая нагрузку на сервер до 80%.
-
Отсутствие WebP — KeyCDN конвертирует изображения в WebP на лету, без изменения URL (параметр
format=webp). - Неоптимальное кэширование — настраиваем заголовки
Cache-ControlиExpires, чтобы браузер и CDN кешировали ресурсы максимально долго.
Pull Zone: как это работает
Используем Pull Zone — KeyCDN сам забирает контент с origin при первом запросе. Никаких rsync или FTP. Для проектов с уже загруженными файлами подходит Push Zone, но Pull — стандарт для динамических сайтов.
Пример создания Pull Zone через API:
curl -X POST \ -u api_key: \ -H "Content-Type: application/json" \ -d '{ "name": "example-assets", "type": "pull", "origins": [{"url": "https://example.ru"}], "ssl": true, "cors_headers": true, "cache_headers": true, "expire": 2592000, "custom_domains": ["cdn.example.ru"] }' \ https://api.keycdn.com/zones.json После зоны KeyCDN выдаёт CNAME (например example-assets-1234.kxcdn.com). Добавляем CNAME-запись в DNS. SSL для кастомного домена выпускается автоматически через Let's Encrypt.
| Критерий | Pull Zone | Push Zone |
|---|---|---|
| Источник | Origin-сервер (HTTP) | Прямая загрузка (rsync/FTP/API) |
| Обновление | Автоматически после инвалидации | Требует ручной загрузки |
| Трафик | Входящий + исходящий | Только исходящий (дешевле) |
| Использование | Динамические сайты | Статические файлы, архивы |
Для 90% проектов выбираем Pull — минимум ручной работы.
Как настроить HTTPS для кастомного домена?
После добавления кастомного домена в зону KeyCDN автоматически выпускает сертификат через Let's Encrypt. Достаточно указать CNAME на предоставленный CDN-домен и подождать 1–5 минут. Никаких ручных CRL или CSR. Важно: для HTTPS убедитесь, что origin-сервер тоже отдаёт статику по HTTPS, иначе смешанный контент.
Почему инвалидация кеша критична?
Без неё после обновления файлов (например, app.css?v2) пользователи увидят старую версию. Инвалидация сбрасывает конкретные URL или всю зону. Мы реализуем её через API: достаточно вызвать DELETE /zones/purgeurl/{zoneId}.json с массивом URL. В Laravel это обёрнуто в сервис-провайдер (см. ниже). Кеш-hit rate падает до 0% при отсутствии инвалидации — критично для обновлений.
Интеграция с Laravel
Простая переадресация статики через сервис-провайдер:
// config/cdn.php return [ 'url' => env('CDN_URL', ''), 'enabled' => env('CDN_ENABLED', false), ]; // AppServiceProvider: переопределить URL для ассетов public function boot(): void { if (config('cdn.enabled') && $cdnUrl = config('cdn.url')) { URL::forceRootUrl($cdnUrl); } } В шаблонах достаточно использовать asset():
{{-- В шаблонах -- }} <img src="{{ asset('images/logo.png') }}" alt="настройка KeyCDN"> {{-- Выдаст: https://cdn.example.ru/images/logo.png -- }} Инвалидация кеша — обёртка через API:
use Illuminate\Support\Facades\Http; class KeyCdnService { private string $apiKey; private string $zoneId; public function purge(array $urls): void { Http::withBasicAuth($this->apiKey, '') ->delete("https://api.keycdn.com/zones/purgeurl/{$this->zoneId}.json", [ 'urls' => $urls, ]); } public function purgeAll(): void { Http::withBasicAuth($this->apiKey, '') ->get("https://api.keycdn.com/zones/purge/{$this->zoneId}.json"); } } Настройка заголовков origin
KeyCDN кеширует то, что отдаёт origin. Правильные заголовки на Nginx:
location /assets/ { expires 1y; add_header Cache-Control "public, max-age=31536000, immutable"; add_header Access-Control-Allow-Origin *; } | Заголовок | Рекомендуемое значение | Назначение |
|---|---|---|
Cache-Control | public, max-age=31536000, immutable | Долгосрочное кеширование неизменяемых файлов |
Expires | 1y | Устаревание через год |
Vary | Accept-Encoding | Поддержка сжатия |
Для повышения hit-rate используйте s-maxage и stale-while-revalidate для CDN. Активируйте WebP через параметр ?format=webp в конфиге зоны.
Процесс работы
- Аудит — анализируем текущие метрики, определяем статические ресурсы, проверяем заголовки кеширования.
- Создание зоны — настраиваем Pull Zone, указываем origin, включаем HTTPS, CORS, кастомный домен.
- DNS — прописываем CNAME, ждём распространение (до 30 минут).
- SSL — KeyCDN автоматически выпускает Let's Encrypt.
- Интеграция — подключаем CDN в код (Laravel, WordPress, любой CMS), настраиваем инвалидацию.
- Тестирование — проверяем корректность кеширования, скорости загрузки, WebP.
- Мониторинг — настраиваем аналитику KeyCDN (трафик, кеш-hit rate, статус-коды).
В результат входит: документация по интеграции (код, коммиты), доступы к панели KeyCDN, API-ключи, обучение команды работе с кешем и инвалидацией, техническая поддержка 30 дней.
Сроки и гарантии
Базовая настройка — от 2 до 4 часов с момента предоставления доступов. Сложные проекты (кастомные origin, несколько зон) — до 2 дней. Стоимость рассчитывается индивидуально. Опыт 5+ лет, реализовали 50+ проектов — гарантируем стабильную работу и поддержку. Свяжитесь с нами для аудита вашего проекта — бесплатно оценим текущую инфраструктуру. Получите консультацию по настройке KeyCDN.







