Настройка Selectel CDN
Selectel CDN — российский провайдер с точками присутствия в Москве, Санкт-Петербурге и Амстердаме. Оптимален для проектов с российской аудиторией, работает в связке с облачным хранилищем Selectel Object Storage (совместимым с S3 API).
Подключение CDN
- В панели Selectel → CDN → Создать ресурс
- Указать origin-сервер (URL вашего сайта)
- Получить CNAME вида
resource-id.cdn.selectel.ru - Добавить DNS-запись:
cdn.example.ru → resource-id.cdn.selectel.ru
Или через API:
curl -X POST \
-H "X-Auth-Token: $SELECTEL_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "example-assets",
"origin_protocol": "HTTPS",
"origins": [{"source": "example.ru", "backup": false}],
"options": {
"edge_cache_settings": {"enabled": true, "value": "2592000"},
"browser_cache_settings": {"enabled": true, "value": "31536000"},
"gzip_on": {"enabled": true, "value": true},
"force_https": {"enabled": true, "value": true}
}
}' \
https://api.selectel.ru/cdn/resources/
Object Storage как CDN-origin
# Создать публичный контейнер в Object Storage
# S3-совместимый API
aws s3 mb s3://example-assets \
--endpoint-url https://s3.selcdn.ru
# Загрузить файлы
aws s3 sync ./public/assets s3://example-assets/assets/ \
--endpoint-url https://s3.selcdn.ru \
--cache-control "public, max-age=31536000, immutable" \
--content-encoding gzip
Интеграция с Laravel (S3 + CDN)
// config/filesystems.php
'selectel' => [
'driver' => 's3',
'key' => env('SELECTEL_KEY'),
'secret' => env('SELECTEL_SECRET'),
'region' => 'ru-1',
'bucket' => env('SELECTEL_BUCKET'),
'endpoint' => 'https://s3.selcdn.ru',
'url' => env('CDN_URL'), // https://cdn.example.ru
'use_path_style_endpoint' => false,
],
// Загрузка медиафайла через CDN
Storage::disk('selectel')->put(
'images/' . $filename,
$file->getContent(),
[
'visibility' => 'public',
'CacheControl' => 'public, max-age=31536000',
'ContentType' => $file->getMimeType(),
]
);
$publicUrl = Storage::disk('selectel')->url('images/' . $filename);
// Вернёт: https://cdn.example.ru/images/filename.webp
Инвалидация кеша
Http::withHeaders(['X-Auth-Token' => config('services.selectel.token')])
->delete("https://api.selectel.ru/cdn/resources/{$resourceId}/cache", [
'paths' => ['/images/updated-image.webp'],
]);
Настройки безопасности
- Referer validation — разрешить раздачу только для вашего домена (защита от hotlinking)
- Token-based URL authentication — подписанные URL для защищённых файлов
Срок настройки: несколько часов для подключения CNAME и настройки Object Storage.







