Настройка KeyCDN
KeyCDN — европейский CDN с простой ценовой моделью (pay-as-you-go, $0.04 за ГБ), 35+ точек присутствия, специализация на доставке статических файлов. Хороший выбор для небольших проектов и european-first аудитории.
Создание Zone
Зона (Zone) в KeyCDN — это конфигурация для одного источника. Типы:
- Pull Zone — KeyCDN сам забирает контент с origin при первом запросе (рекомендуется)
- Push Zone — файлы загружаются напрямую через rsync/FTP/API
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
DNS настройка
После создания zone KeyCDN выдаёт CNAME (например example-assets-1234.kxcdn.com). Добавить CNAME-запись:
cdn.example.ru → example-assets-1234.kxcdn.com
SSL для кастомного домена — KeyCDN выпускает Let's Encrypt автоматически.
Интеграция с 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);
}
}
{{-- В шаблонах -- }}
<img src="{{ asset('images/logo.png') }}" alt="Логотип">
{{-- Выдаст: https://cdn.example.ru/images/logo.png -- }}
Инвалидация кеша
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 *; # для шрифтов через CDN
}
Срок настройки: несколько часов для подключения и настройки CNAME.







