Налаштування KeyCDN: Pull Zone, HTTPS, кеш та інтеграція
Повільне завантаження статики для європейських користувачів? 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.







