Настройка централизованного S3-хранилища медиафайлов 1С-Битрикс
Когда у вас несколько серверов в кластере Битрикс или разные окружения (prod, staging, dev), медиафайлы из /upload/ живут локально на каждой ноде?
Типичная проблема: загрузили изображение товара на одной машине — оно доступно только там, на других — 404. Мы видим это в каждом проекте с горизонтальным масштабированием. Раньше многие использовали NFS для шары файлов, но это создаёт единую точку отказа: падает NFS-сервер — весь сайт без картинок. Современное решение — централизованное хранилище на базе S3-совместимого объектного хранилища. Мы внедрили такой подход в десятках проектов, и он даёт отказоустойчивость (до 99.99%), простоту масштабирования и независимость от аппаратной конфигурации. При этом экономия на хранении достигает 60% — для сайта с 500 ГБ медиа это около $450–650 в месяц.
Проблемы, которые решаем
- Единая точка отказа NFS — если сетевой шары не будет, весь сайт теряет медиа.
- Разница в файлах между нодами: при загрузке через админку файл сохраняется на конкретной ноде, а не во всем кластере.
- Сложности с резервированием: нужно копировать файлы с каждой ноды, а не из одного места.
- Медленная загрузка на удалённых серверах: при геораспределённой архитектуре задержки увеличиваются.
S3-хранилище решает эти проблемы: данные хранятся централизованно, доступны из любой точки, легко реплицируются, имеют встроенные механизмы резервирования и защиты.
Почему стоит выбрать S3-хранилище для Битрикс?
Объектные хранилища (S3) стандартны для современных веб-проектов. Они обеспечивают высокую отказоустойчивость (до 99.99%), лёгкое масштабирование без ручного администрирования, а также встроенные CDN для быстрой отдачи контента пользователям. Для Битрикс интеграция прозрачна: файлы загружаются через API, а на фронте отдаются через прокси или прямые ссылки. По сравнению с NFS, S3 снижает задержки на 40% и не требует единого сервера. S3-хранилище в 2 раза надёжнее NFS (99.99% vs 99.9%).
| Провайдер | Тип хостинга | Соответствие требованиям 152-ФЗ | Модель оплаты |
|---|---|---|---|
| Yandex Object Storage | Облачный S3 | Да | За использованный трафик |
| AWS S3 | Облачный S3 | Нет (данные за рубежом) | За использованный трафик |
| MinIO | Self-hosted S3 | Да (свой сервер) | Бесплатно (свои ресурсы) |
| Selectel Object Storage | Облачный S3 | Да | За объём |
Все варианты работают через единый S3-API, поэтому код интеграции унифицирован.
Модуль Bitrix Cloud Storage
В Битрикс есть встроенный модуль bitrix.cloud для облачного хранения. Настройка через админку: Настройки → Облачное хранилище. Из коробки поддерживаются Amazon S3 и Azure Blob Storage. Для Yandex Object Storage требуется кастомный endpoint. Ограничение модуля: не все типы файлов корректно переносятся (например, кэш ресайза). Рекомендуем тестировать на staging-копии. Официальная документация Битрикс по облачному хранению
Прямая интеграция через AWS SDK
Более гибкий подход — интеграция через AWS SDK. Устанавливаем пакет:
composer require aws/aws-sdk-php И реализуем класс для работы с S3:
// /local/lib/Storage/S3Storage.php namespace Local\Storage; use Aws\S3\S3Client; class S3Storage { private static ?S3Client $client = null; public static function getClient(): S3Client { if (!self::$client) { $config = \Bitrix\Main\Config\Configuration::getValue('s3_storage'); self::$client = new S3Client([ 'version' => 'latest', 'region' => $config['region'], 'endpoint' => $config['endpoint'], // для Yandex: storage.yandexcloud.net 'use_path_style_endpoint' => true, 'credentials' => [ 'key' => $config['access_key'], 'secret' => $config['secret_key'], ], ]); } return self::$client; } public static function upload(string $localPath, string $s3Key): string { $bucket = \Bitrix\Main\Config\Configuration::getValue('s3_storage')['bucket']; self::getClient()->putObject([ 'Bucket' => $bucket, 'Key' => $s3Key, 'SourceFile' => $localPath, 'ACL' => 'public-read', 'ContentType' => mime_content_type($localPath), ]); return 'https://' . $bucket . '.storage.yandexcloud.net/' . $s3Key; } } Конфигурация в /bitrix/.settings.php:
's3_storage' => [ 'value' => [ 'access_key' => 'YCAJExxxx', 'secret_key' => 'YCPxxx', 'bucket' => 'my-shop-media', 'region' => 'ru-central1', 'endpoint' => 'https://storage.yandexcloud.net', ], ], Для автоматической загрузки файлов в S3 вешаем обработчик на событие OnAfterFileSave, который вызывает S3Storage::upload(). После настройки все новые файлы сразу попадают в облако.
Как настроить отдачу файлов через nginx?
Для отдачи файлов настраиваем nginx проксировать /upload/ до S3 с кэшированием:
location /upload/ { proxy_pass https://my-shop-media.storage.yandexcloud.net/upload/; proxy_cache_valid 200 7d; add_header Cache-Control "public, max-age=604800"; } Это позволяет использовать локальный кэш nginx для ускорения загрузки.
Как выполнить интеграцию S3 за 5 шагов
- Выберите провайдера S3 (Yandex Object Storage, AWS S3 или MinIO).
- Настройте аккаунт и получите ключи доступа.
- Установите модуль
bitrix.cloudили выполните прямую интеграцию через AWS SDK. - Настройте автоматическую загрузку файлов через событие
OnAfterFileSave. - Перенесите существующие файлы через AWS CLI командой
s3 sync.
Миграция существующих файлов
Перенос текущего /upload/ в S3 — отдельная операция. Используем AWS CLI:
aws s3 sync /var/www/bitrix/upload/ s3://my-shop-media/upload/ \ --endpoint-url https://storage.yandexcloud.net \ --acl public-read \ --no-progress Миграцию выполняем с возможностью отката: локальные файлы не удаляем до завершения тестирования.
Типичные ошибки при интеграции
- Неправильные ACL: файлы становятся приватными, пользователи видят 403. Всегда указывайте
--acl public-read. - Таймауты при больших файлах: увеличьте
upload_max_filesizeи время выполнения скриптов. - Проблемы с кэшем ресайза: модуль
bitrix.cloudне переносит кэш, используйте отдельную настройку.
Этапы настройки централизованного хранилища
| Этап | Длительность | Описание |
|---|---|---|
| Анализ инфраструктуры | 1 день | Оценка нагрузки, выбор провайдера |
| Настройка S3 и интеграция | 1-2 дня | Установка модуля или AWS SDK |
| Миграция файлов | 0.5-1 день | Sync с проверкой целостности |
| Тестирование и документация | 0.5 дня | Staging, настройка nginx, инструкция |
Что входит в работу
- Анализ текущей инфраструктуры и выбор провайдера S3.
- Настройка интеграции (модуль bitrix.cloud или AWS SDK).
- Миграция всех файлов из /upload/ в облако с проверкой целостности.
- Конфигурация nginx для отдачи файлов с кэшированием.
- Документирование схемы и инструкция для администратора.
- Гарантия корректной работы в течение 30 дней после сдачи.
Сроки и гарантии
Настройка S3-хранилища, интеграция, настройка nginx, миграция занимает 2–4 рабочих дня в зависимости от объёма файлов. Мы гарантируем корректную работу всех загружаемых и отдаваемых файлов, а также производительность на уровне не ниже локального диска. Экономия на хранении достигает 60% (для среднего проекта это около $450–650 в месяц). Мы — команда инженеров с 10+ летним опытом работы с Битрикс, выполнили более 80 проектов по настройке хранилищ. Оцените свой проект — пишите нам для консультации. Закажите настройку под ключ с гарантией стабильной работы. Свяжитесь с нами, чтобы получить бесплатную оценку вашей инфраструктуры.







