Конфігурація Яндекс Object Storage для 1С-Бітрікс
Яндекс Object Storage — S3-сумісне сховище, але з кількома відмінностями від AWS, які ломають стандартну S3-інтеграцію Бітрікса. Endpoint не amazonaws.com, регіон завжди ru-central1, а URL бакету має власний формат.
Параметри підключення
Endpoint Яндекс Object Storage: https://storage.yandexcloud.net. Регіон: ru-central1. URL публічного доступу до файлів: https://[bucket].storage.yandexcloud.net/[key] — virtual hosted style.
В /bitrix/admin/main_cloud_storage.php:
- Тип сховища: Amazon S3 (сумісне)
-
Endpoint:
https://storage.yandexcloud.net -
Region:
ru-central1 - Access Key: ідентифікатор статичного ключа з консолі Яндекс.Облако
- Secret Key: секретний ключ
- Bucket: назва бакету
Створення сервісного аккаунту та ключів — в консолі Яндекс.Облако: IAM → Сервісні аккаунти → Створити → Видати роль storage.editor на бакет → Створити статичний ключ доступу.
Розходження з модулем Бітрікса
Модуль main.cloudstorages у Бітриксі використовує AWS SDK PHP. При підключенні до Яндекс Object Storage через цей SDK виникає проблема зі Signature Version. Яндекс підтримує тільки AWS Signature Version 4 (SigV4), а SDK для кастомних endpoint може намагатися використовувати SigV2. Явне вказання версії підпису:
// Клас /bitrix/modules/main/lib/cloudstorages/amazon.php
$s3Client = new \Aws\S3\S3Client([
'version' => 'latest',
'region' => 'ru-central1',
'endpoint' => 'https://storage.yandexcloud.net',
'signature' => 'v4',
'credentials' => [
'key' => $accessKey,
'secret' => $secretKey,
],
]);
Якщо модуль не дозволяє передати параметр signature через інтерфейс, редагується клас-провайдер з бэкапом — або застосовується патч через наслідування.
CORS для завантаження з браузера
При використанні прямого завантаження в Object Storage з браузера (presigned URL) необхідна CORS-конфігурація бакету. В консолі Яндекс.Облако, розділ "CORS":
<CORSConfiguration>
<CORSRule>
<AllowedOrigin>https://example.com</AllowedOrigin>
<AllowedMethod>GET</AllowedMethod>
<AllowedMethod>PUT</AllowedMethod>
<AllowedHeader>*</AllowedHeader>
<MaxAgeSeconds>3600</MaxAgeSeconds>
</CORSRule>
</CORSConfiguration>
Без CORS браузер блокує завантаження файлів з редактора TinyMCE або кастомних форм завантаження.
Lifecycle-політики для тимчасових файлів
У Яндекс Object Storage підтримуються lifecycle-правила — автоматичне видалення файлів старше N днів. Це корисно для тимчасових файлів імпорту/експорту, які Бітрікс складає в /upload/tmp/ та /upload/import/. Настройка в консолі або через API:
{
"Rules": [{
"ID": "cleanup-tmp",
"Status": "Enabled",
"Filter": { "Prefix": "upload/tmp/" },
"Expiration": { "Days": 7 }
}]
}
Настройка CDN
Яндекс Cloud CDN інтегрується з Object Storage за дві хвилини: створити CDN-ресурс з джерелом — бакет Object Storage, вказати домен CDN в настройках модуля main.cloudstorages як CDN_URL. Після цього Бітрікс формує публічні URL через CDN, а файли розповсюджуються з найближчої точки присутності.
Параметр в настройках модуля:
\Bitrix\Main\Config\Option::set('main', 'cloud_storage_cdn_url', 'https://cdn.example.com');
При цьому запис файлів йде напрямку в бакет, а читання — через CDN. Для Бітрікксового кеша ресайзів зображень це дає помітний приріст швидкості завантаження сторінок каталога.







